访问Azure Active Directory安全资源时出错

时间:2016-01-04 11:05:33

标签: azure

我需要访问通过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"

有人可以帮我解决这个问题吗?

感谢。

1 个答案:

答案 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标题,希望您可以访问!