使用除我的AAD帐户之外的ms真实帐户时,Azure AD身份验证失败

时间:2017-12-01 06:08:17

标签: c# azure azure-active-directory microsoft-graph

我尝试从他们的Microsoft真实帐户中读取用户数据。我编写了如下代码:

    public void GetUserData(){
        var authContext = new AuthenticationContext("https://login.microsoftonline.com/common/");
        var result = _authenticationContext
                .AcquireTokenAsync("https://graph.microsoft.com", "<my client/app ID>", "<redirect URI>", new PlatformParameters(PromptBehavior.RefreshSession))
                .Result;    
        var accessToken = result.AccessToken;

        var httpClient = new HttpClient();
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",accessToken);
        var userResponse = httpClient.GetStringAsync("https://graph.microsoft.com/beta/me/").Result;

        //DO SOMTHING WITH DATA
    }

当我使用我的AAD凭证时,我的代码工作正常,但当我使用我的个人帐户时,它会出现以下错误。

  

AADSTS50020:来自身份提供商的用户帐户“XXXX@outlook.com”   租户'默认目录'中不存在'live.com',但不能   访问应用程序'XXXXXXXXXXXXXXXXX'   承租人。该帐户需要作为外部用户添加到   租户第一。注销并使用其他Azure Active再次登录   目录用户帐户。

以下是截图:

enter image description here

它类似于this question。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:3)

v1端点要求用户是目录中的成员。

您应该使用v2.0端点:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-appmodel-v2-overview

如果您只希望登录消费者MS帐户,则可以将授权URL指定为:

https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize

答案 1 :(得分:1)

首先,对于问题中的错误按摩,您需要先将实时帐户添加到目录中,然后尝试使用Azure AD v2端点进行身份验证。 您无法使用不在该目录中的外部帐户登录该应用

我认为您希望任何Microsoft真实帐户都可以使用您的应用。

根据此要求,我建议您使用Azure AD B2C来实现此目标。 Azure AD B2C可以使您的应用程序使用任何Microsoft帐户进行身份验证。您可以将Microsoft帐户添加为社交身份提供程序。因此,任何真实帐户都可以通过Azure AD B2C注册并登录您的应用程序。

您可以查看有关使用Microsoft帐户in this official document向消费者提供注册和登录的详细信息。

希望这有帮助。