您在 Scope 中发送的内容是不是决定您是不是可以使用 Azure AD V2 终结点使用 Microsoft 帐户登录
Posted
技术标签:
【中文标题】您在 Scope 中发送的内容是不是决定您是不是可以使用 Azure AD V2 终结点使用 Microsoft 帐户登录【英文标题】:Does what you send in Scope Governs whether you can login with Microsoft Account using Azure AD V2 Endpoints您在 Scope 中发送的内容是否决定您是否可以使用 Azure AD V2 终结点使用 Microsoft 帐户登录 【发布时间】:2019-07-02 22:57:06 【问题描述】:我已经使用应用注册(预览版)刀片注册了一个应用程序,并将 Azure 服务管理 API 添加为 API 权限我从
下载了基于 MSAL 的示例https://github.com/azure-samples/active-directory-dotnet-webapp-openidconnect-v2
现在在 startup.auth.cs 中,如果我更改范围,即保留 openid 并添加 https://management.azure.com,然后运行并尝试使用 Microsoft 帐户登录,我会收到以下错误
这看起来不像是工作或学校电子邮件,您无法在此处使用个人帐户登录,而是使用您的工作或学校帐户。
如果我删除 https://managment.azure.com 的范围并只保留 Openid 配置文件 offline_access,我将获得同意屏幕并登录
新的 OpenIdConnectAuthenticationOptions
// Authority
代表 v2.0 端点 - https://login.microsoftonline.com/common/v2.0
// Scope
描述了您的应用程序需要的初始权限。见https://azure.microsoft.com/documentation/articles/active-directory-v2-scopes/
客户 ID = 客户 ID,
权限 = String.Format(CultureInfo.InvariantCulture, aadInstance, "common", "/v2.0"),
RedirectUri = 重定向Uri,
范围 = "openid https://management.azure.com/.default",
PostLogoutRedirectUri = redirectUri,
我希望用户登录并获取管理 API 的令牌,我正在寻找出现上述错误的原因,这是预期的吗?我使用的 Account 作为 Member 存在于我的目录中。如果我使用托管用户(user@tenant.onmicrosoft.com)登录,则此方法有效
【问题讨论】:
你应该使用组织而不是普通。这仅允许 AAD 帐户(如 v1 通用端点) 【参考方案1】:由于个人 MS 帐户不能用于管理 Azure 订阅,除非它们被添加到 Azure AD,因此您应该使用organizations
端点而不是common
。
在 v1 中,“common”表示任何 AAD 租户。 在 v2 中,“通用”是指任何 AAD 租户 + 任何个人 MS 帐户。 如果您只想要个人帐户,则可以使用“消费者”。
https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc#fetch-the-openid-connect-metadata-document
您可以使用“组织”来允许任何 AAD 租户,但不允许 MS 帐户。 当然,用户可以编辑 URL 并使用个人 MS 帐户登录,因此您需要检查登录用户的租户 ID。
MS 帐户的租户 ID 始终为 9188040d-6c67-4c5b-b112-36a304b66dad
,根据文档:https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens#payload-claims。
所以请检查idp
声明。
【讨论】:
以上是关于您在 Scope 中发送的内容是不是决定您是不是可以使用 Azure AD V2 终结点使用 Microsoft 帐户登录的主要内容,如果未能解决你的问题,请参考以下文章
如果您在 OnColliderEnter2D() 中播放声音是不是有任何限制,或者我错过了啥?
如果您在 MySQL 数据库中执行多对多关系,是不是有必要将所有键 id 传输到连接表?