# !!! 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.