我正在尝试让OAuth2工作流正确地为Azure AD执行。我按照此来源的说明进行操作:https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx
我可以使用此请求成功获取授权代码响应:
https://login.microsoftonline.com/[app-endpoint-id]/oauth2/authorize?response_type=code&client_id=[client-id]&redirect_uri=[redirect-uri]
然后我使用授权代码来请求带有http帖子的访问令牌(我正在使用Postman测试):
POST /[app-endpoint-id]/oauth2/token HTTP/1.1 Host: login.microsoftonline.com Cache-Control: no-cache Postman-Token: ed098281-9aa4-6e5f-915d-0253d9a876d3 Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&client_id=[client-id]&code=[authorization_code]&redirect_uri=[redirect_uri]&client_secret=[client-secret]&resource=[app-url]
我从POST请求中收到以下错误消息:
{“error”:“invalid_grant”,“error_description”:“AADSTS65001:用户或 管理员未同意使用带有ID的应用程序 “应用程序ID”。发送此用户的交互式授权请求 资源。\ r \ nTrace ID:trace-di \ r \ n相关ID: correlation-id \ r \ n时间戳:2016-01-13 17:18:39Z “ ”error_codes“:[65001], ”时间戳“:” 2016年1月13日 17:18:39Z”, “trace_id的”: “跟踪-ID”, “CORRELATION_ID”: “相关性标识”}
如果我清除缓存并发出第一次授权代码请求,我将被重定向到登录。但是,登录后我没有办法授权我的应用程序,就像它在本文档中说的那样:
//azure.microsoft.com/en-us/documentation/articles/active-directory-integrating-applications/
我在这里做错了什么?我正在尝试获取访问令牌。
答案 0 :(得分:10)
您遇到的问题是您用于访问应用的租户尚未将您的应用添加到受支持的应用列表中。它告诉您以管理员身份使用交互式流程。
同意是一个两步过程:
1)首先,租户的管理员必须批准该应用。这可以在1)希望使用该应用程序的租户的Azure门户中完成,或2)通过启动应用程序并在登录时使用管理员凭据对应用程序进行。
Azure门户审批示例:
2)其次,在管理员同意可以使用该应用后,任何其他用户(非管理员)在首次使用该应用时将被提升为同意其个人信息。
答案 1 :(得分:2)
尝试在帖子请求中将资源设为“https://graph.windows.net”。
它对我有用。
答案 2 :(得分:0)
确保您的Azure AD设置允许添加此类应用程序。 Azure AD应用程序>管理>用户设置下有几个影响应用程序注册方式的属性。您组织中的某个人可能已完全关闭了应用程序注册,或者严重限制了这些选项。您可以签出这些设置。 here可以解决此问题。