首页 > 解决方案 > 使用个人 Microsoft 帐户登录 Oauth2 v2 失败

问题描述

我确实使用我的 Office365 公司帐户在 portal.azure.com 上注册了一个新应用程序以访问 GraphAPI。

虽然身份验证适用于我们自己域中的用户(在 O365 中注册的用户),但我不断收到来自个人 Microsoft 帐户(outlook.com 或 live.com)的用户的错误。

我确实设置了应用程序以支持“所有 Microsoft 帐户用户”。

这是清单

{
    "id": "valid-uid",
    "acceptMappedClaims": null,
    "accessTokenAcceptedVersion": 2,
    "addIns": [],
    "allowPublicClient": null,
    "appId": "valid-uid",
    "appRoles": [],
    "oauth2AllowUrlPathMatching": false,
    "createdDateTime": "2019-08-29T13:34:54Z",
    "groupMembershipClaims": "All",
    "identifierUris": [
        "api://app-id"
    ],
    "informationalUrls": {
        "termsOfService": null,
        "support": null,
        "privacy": null,
        "marketing": null
    },
    "keyCredentials": [],
    "knownClientApplications": [],
    "logoUrl": null,
    "logoutUrl": null,
    "name": "My Application (DEV2)",
    "oauth2AllowIdTokenImplicitFlow": false,
    "oauth2AllowImplicitFlow": true,
    "oauth2Permissions": [],
    "oauth2RequirePostResponse": false,
    "optionalClaims": null,
    "orgRestrictions": [],
    "parentalControlSettings": {
        "countriesBlockedForMinors": [],
        "legalAgeGroupRule": "Allow"
    },
    "passwordCredentials": [
        {
            "customKeyIdentifier": null,
            "endDate": "2299-12-30T23:00:00Z",
            "keyId": "valid-uid",
            "startDate": "2019-08-29T13:40:10.571Z",
            "value": null,
            "createdOn": "2019-08-29T13:40:11.7033226Z",
            "hint": "U18",
            "displayName": "Local Client"
        }
    ],
    "preAuthorizedApplications": [],
    "publisherDomain": "NETORGFT(integer-nr).onmicrosoft.com",
    "replyUrlsWithType": [
        {
            "url": "http://localhost:8080/auth/microsoft/callback",
            "type": "Web"
        }
    ],
    "requiredResourceAccess": [
        {
            "resourceAppId": "00000003-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "e1fe6dd8-ba31-4d61-89e7-88639da4683d",
                    "type": "Scope"
                }
            ]
        }
    ],
    "samlMetadataUrl": null,
    "signInUrl": null,
    "signInAudience": "AzureADandPersonalMicrosoftAccount",
    "tags": [],
    "tokenEncryptionKeyId": null
}

这是我在尝试使用 outlook.com(个人帐户)登录时遇到的错误。

- - - - - - - - 错误 - - - - - - - -

登录 抱歉,我们无法让您登录。

AADSTS50020:来自身份提供商“live.com”的用户帐户“someemail@outlook.com”在租户“ourdomain.com”中不存在,并且无法访问应用程序“uid-of-our-app”(我的应用程序(DEV2))在那个租户。需要先将该帐户添加为租户中的外部用户。注销并使用不同的 Azure Active Directory 用户帐户重新登录。

尽管已将应用程序配置为,为什么会出现该错误"signInAudience": "AzureADandPersonalMicrosoftAccount"

标签: azureoauth-2.0azure-ad-graph-api

解决方案


其实这是我自己想出来的。

如果您通过 URL 传递租户 ID,Manifest 属性似乎会被忽略 https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize...。

在我发现的文档中,对于企业和个人帐户,您必须'common'通过{tenant}. https://login.microsoftonline.com/common/oauth2/v2.0/authorize

请求路径中的 {tenant} 值可用于控制谁可以登录应用程序。允许的值为

  • common对于 Microsoft 帐户和工作或学校帐户,
  • organizations仅适用于工作或学校帐户,
  • consumers仅适用于 Microsoft 帐户,以及租户 ID 或域名等租户标识符。

更多信息在这里https://docs.microsoft.com/en-us/graph/auth-v2-user


推荐阅读