# !!! The special redirect URI "urn:ietf:wg:oauth:2.0:oob used
# !!! by httr in case httuv is not installed is currently not
# !!! supported by Azure Active Directory (AAD).
# !!! Therefore it is required to install httpuv to make this work.
# 1. Register an app app in AAD, e.g. as a "Native app", with
# redirect URI .
# 2. Insert the App name:
app_name <- 'myapp' # not important for authorization grant flow
# 3. Insert the created apps client ID which was issued after app creation:
client_id <- 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
# In case your app was registered as a web app instead of a native app,
# you might have to add your secret key string here:
client_secret <- NULL
# API resource ID to request access for, e.g. Power BI:
resource_uri <- 'https://analysis.windows.net/powerbi/api'
# Obtain OAuth2 endpoint settings for azure:
# This uses the "common" endpoint.
# To use a tenant url, create an
# oauth_endpoint(authorize = "https://login.windows.net//oauth2/authorize",
# access = "https://login.windows.net//oauth2/token")
# with replaced by your endpoint ID.
azure_endpoint <- oauth_endpoints('azure')
# Create the app instance.
myapp <- oauth_app(appname = app_name,
key = client_id,
secret = client_secret)
# Step through the authorization chain:
# 1. You will be redirected to you authorization endpoint via web browser.
# 2. Once you responded to the request, the endpoint will redirect you to
# the local address specified by httr.
# 3. httr will acquire the authorization code (or error) from the data
# posted to the redirect URI.
# 4. If a code was acquired, httr will contact your authorized token access
# endpoint to obtain the token.
mytoken <- oauth2.0_token(azure_endpoint, myapp,
user_params = list(resource = resource_uri),
use_oob = FALSE)
if (('error' %in% names(mytoken$credentials)) && (nchar(mytoken$credentials$error) > 0)) {
errorMsg <- paste('Error while acquiring token.',
paste('Error message:', mytoken$credentials$error),
paste('Error description:', mytoken$credentials$error_description),
paste('Error code:', mytoken$credentials$error_codes),
sep = '\n')
stop(errorMsg)
}
# Resource API can be accessed through "mytoken" at this point.