ADAL - 如何以编程方式检索oAuth访问令牌

时间:2016-06-08 19:33:43

标签: java oauth azure-active-directory adal

我正在编写一个使用Microsoft Graph API的服务。要检索访问令牌,我已完成以下操作:

  1. 使用基于SOAP的IProvisioningWebService创建一个具有“公司管理员”角色的ServicePrincipal(假设我将拥有组织管理员凭据)
  2. 然后使用ADAL4J lib检索访问令牌

    // clientId = AppPrincipalId created in step#1
    Future<AuthenticationResult> future = context.acquireToken(
            "https://graph.windows.net", clientId, username, password,
            null);
    
  3. 我收到以下错误,我的方法无效?

      

    com.microsoft.aad.adal4j.AuthenticationException:{“error”:“invalid_grant”,“error_description”:“AADSTS65001:用户或管理员未同意使用ID为'XXXX'的应用程序。发送交互式授权请求此用户和资源。\ r \ nTrace ID:

2 个答案:

答案 0 :(得分:0)

您需要访问azure portal并添加访问应用程序中的图形的权限。执行此操作的选项将位于页面底部&#34;委派权限&#34;。

答案 1 :(得分:0)

发现这是我的问题...我应该使用clientId(appPrincipalId和client_secret(创建SP时使用的密码)并使用以下调用来检索access_token。

String authority = String.format("https://login.windows.net/%s",getTenantContextId()); context = new AuthenticationContext(authority, false, service); ClientCredential clientCredential = new ClientCredential(getAppPrincipalId(),getSymmetricKey()); Future future = context.acquireToken("https://graph.windows.net", clientCredential, null);