【发布时间】:2017-05-01 17:58:40
【问题描述】:
我想获取访问令牌以在我的 Web 表单应用程序中调用一些 api,但我想说应用程序已经是一个大项目,我不想使用任何库,我只想单击一个按钮,输入名称/密码,并获取访问令牌,我要做的就是在页面代码中,没有其他任何可能影响整个项目的东西,例如安装库。
【问题讨论】:
-
:哥们,请开始学习API和访问令牌。你会明白的。这不像是一份小工作。
我想获取访问令牌以在我的 Web 表单应用程序中调用一些 api,但我想说应用程序已经是一个大项目,我不想使用任何库,我只想单击一个按钮,输入名称/密码,并获取访问令牌,我要做的就是在页面代码中,没有其他任何可能影响整个项目的东西,例如安装库。
【问题讨论】:
代表用户获取 Azure Active Directory 的访问令牌只需要您遵循授权代码授予流程。
虽然我们的库使这非常容易实现 (see here),但它们绝对不是必需的。
在此处了解 OAuth 2 协议:Authorize access to web applications using OAuth 2.0 and Azure Active Directory
内容的简短总结是:
让用户使用包含有关您的应用程序身份信息的特定登录 url 登录到您的应用程序。
https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345
这将向重定向 URI 返回一个授权代码,您需要用它来交换访问令牌:
POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=2d4d11a2-f814-46a7-890a-274a72a7309e
&code=AwABAAAA...
&redirect_uri=https%3A%2F%2Flocalhost%2Fmyapp%2F
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=p@ssw0rd
如果您成功完成所有操作,您现在应该拥有访问令牌。现在就随意调用您的 API。 :)
【讨论】:
我之前在 Web 表单应用程序中做过相关的代码示例,但您应该首先了解 authorization code flow 在 AAD 中的工作原理。之后,您可以点击here 获取代码示例。您会在我的代码中发现我使用 ADAL 使用授权代码获取访问令牌。你需要做的是修改AcquireTokenWithResource函数:
编码过程中有任何问题,请随时告诉我。
【讨论】: