我需要访问通过Azure Active Directory保护的Web API。我按照此文档https://msdn.microsoft.com/sv-se/library/azure/dn645542.aspx
第一步是成功的,但最后我无法访问所需的资源。
我做了什么:
首先,我将此链接称为
https://login.microsoftonline.com/mytenantname.onmicrosoft.com/oauth2/authorize?response_type=code&client_id=3eec...32e5
并重定向到登录门户。
成功登录后,我从重定向的URL中提取代码,就像这样
https://localhost:8080/?code=AAABAAAAiL9Kn2Z27........RdzFpearqiAA
然后我使用此代码获取访问令牌。第一个问题在这里。根据文档(上面的链接),资源是可选的。但是如果我省略了资源(错误=没有提供资源标识符),它就无法工作,所以我必须提供它。其次,如果我将在Azure AD中注册的应用程序的APP ID URI添加到resourse参数中,则会出现另一个错误(客户端' 3eec ... 32e5'以及资源' myapp.azurewebsites。 net'识别相同的应用程序。)。因此我将graph.windows.net用于资源参数。
curl -s -X POST https://login.microsoftonline.com/akeliusdev.onmicrosoft.com/oauth2/token
-d grant_type=authorization_code -d client_id=3eec...32e5
-d client_secret=F%2BfpjpR............Wi8%3D
-d code=AAABAAAAiL9Kn2Z27........RdzFpearqiAA -d resource=https://graph.windows.net
这样我就可以获得访问令牌。但后来我无法使用访问令牌访问资源。我是这样做的:
curl https://myapp.azurewebsites.net/data
--header "Authorization:eyJ0eXAiOiJKV1QiLCJhbGciOiJ.............4WYr6xn"
有人可以帮我解决这个问题吗?
感谢。
答案 0 :(得分:0)
要将此作为服务电话的服务,无需用户互动,您可以关注Service to Service Calls Using Client Credentials
您需要创建AAD应用程序和凭据。即服务负责人。
然后获取访问令牌,您对
进行POST调用 https://login.windows.net/<tenant ID>/oauth2/token
包含以下数据
grant_type=client_credentials&client_id=$username&client_secret=$password&resource=$resource
其中$ username是您的HTTP://localhost/whatever
标识符
$ password是您的服务主密码
$ resource是https://management.core.windows.net/
(这可能是图表,请尝试查看)
访问令牌将在JSON响应中作为&#39; access_token&#39;
然后添加Authorization: Bearer $AccessToken
标题,希望您可以访问!