我尝试从他们的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再次登录 目录用户帐户。
以下是截图:
它类似于this question。有人可以帮帮我吗?
答案 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向消费者提供注册和登录的详细信息。
希望这有帮助。