您在 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 传输到连接表?

尝试从扩展包中的 html 窗口向内容脚本发送消息

核心数据中是不是使用了可选属性? [复制]

Jenkins - 此环境中未提供编译器。也许您在 JRE 而不是 JDK 上运行?

当您在 postgres-XL 中有多个协调器时,您是不是有任何浮动 ip 重定向到一个协调器?