【问题标题】:Get Access Token from Azure Active Directory using username and password使用用户名和密码从 Azure Active Directory 获取访问令牌
【发布时间】:2020-12-21 15:45:54
【问题描述】:
我正在尝试使用 Azure Active Directory 创建 POF,因为我计划稍后在生产应用程序中使用它。
在 Microsoft 文档中,我发现登录的唯一方法是重定向到 microsoft 页面以提供用户名和密码。
是否有一些 API 可以用来获取提供用户名和密码的访问令牌?我可以测试它,例如,使用邮递员。
【问题讨论】:
标签:
azure-active-directory
【解决方案1】:
您可以使用Resource Owner Password Credentials(ROPC) flow 获取访问令牌。请先查看重要提示,以确保您可以在应用程序中使用它。
- Microsoft 标识平台终结点仅支持 Azure AD 租户的 ROPC,不支持个人帐户。这意味着您必须使用
特定于租户的端点
(https://login.microsoftonline.com/{TenantId_or_Name}) 或
组织端点。
- 受邀加入 Azure AD 租户的个人帐户无法使用 ROPC。
- 没有密码的帐户无法通过 ROPC 登录。对于这种情况,我们建议您为您的应用使用不同的流程
而是。
- 如果用户需要使用多重身份验证 (MFA) 来登录应用程序,他们将被阻止。
- 混合身份联合方案(例如,用于对本地帐户进行身份验证的 Azure AD 和 ADFS)不支持 ROPC。
如果用户被整页重定向到本地身份
提供商,Azure AD 无法测试用户名和密码
针对该身份提供者。直通身份验证是
但是,ROPC 支持。
尝试执行此请求以获取访问令牌。
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
client_id=<your-app-id>
&scope=<scopes-in-api-permissions>
&username=<username>
&password=<password>
&grant_type=password
【解决方案2】:
当您希望通过发送用户名和密码来获取访问令牌时
你可以使用邮递员或卷曲操作
POST {tenant}/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=user.read%20openid%20profile%20offline_access
&username=MyUsername@myTenant.com
&password=SuperS3cret
&grant_type=password
curl -X POST -d "client_id=clientid&scope=user.read&grant_type=password&username=username&password=Password" https://login.microsoftonline.com/tenantid/oauth2/v2.0/token
注意:Microsoft 建议您不要使用 ROPC 流程。多数情况
在各种情况下,可以使用并推荐更安全的替代方案。
此流程需要对应用程序高度信任,并且
承担其他流程中不存在的风险。你应该只
在无法使用其他更安全的流程时使用此流程。