我正在尝试为非微软用户获取访问令牌而不提示。
它有助于我提示:
authenticationContext.AcquireToken(resource, clientId, new Uri(uri), PromptBehavior.Always);
但没有提示它没有用。我尝试了以下两种方式:
var authContext = new AuthenticationContext(Authority);
var userCredential = new UserCredential(username, password);
var token = authContext.AcquireToken(resource, clientId, userCredential);
ActiveDirectory v3异常:访问WS元数据交换失败。
ActiveDirectory v2:序列不包含任何元素。
new HttpRequestMessage(HttpMethod.Post, "https://login.microsoftonline.com/<tenantId>/oauth2/token");
使用:
$"grant_type=password&resource={resource}&client_id=
{clientId}&username={userName}&password={password}"
错误说明:&#34; AADSTS50034:要登录此应用程序,必须将帐户添加到 tenantId 目录。
我使用的用户是我试图登录的租户,并且它起作用了。 我想知道为什么它不能用于其他两种方式。
由于
答案 0 :(得分:0)
这里的问题可能只是&#34;用户名&#34;对于来宾帐户不是&#34; xxx@outlook.com"。当在AAD中从MSA帐户(如@ outlook.com或@ live.com)创建访客帐户时,会生成一个具有唯一用户主体名称的新AAD用户,该用户主体名称如下所示:
{
"id": "d3ce3d26-xxx-xxx-xxx-5157f5308f04",
"businessPhones": [],
"displayName": "Shawn Tabrizi",
"givenName": "Shawn",
"jobTitle": null,
"mail": null,
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": "Tabrizi",
"userPrincipalName": "shawntabrizi_live.com#EXT#@shawntest.onmicrosoft.com"
},
请注意“奇怪的”&#39;格式化userPrincipalName
。您可以看到这是为我的@ live.com帐户创建的访客帐户。我通过在我的租户中拨打以下电话来获得此信息:
GET https://graph.microsoft.com/v1.0/users
这里的解决方案可能是填充带有userPrincipalName
值的用户名字段,这是AAD知道并期望作为用户的唯一ID,而不是原始的MSA用户名。
下一个自然的问题是为什么xxx@outlook.com帐户可以通过交互式登录体验登录?那么可能有很多魔法&#39;发生在该页面中,无法使用Azure Active Directory中的资源所有者密码凭据授予进行复制。
如果这可以解决问题,请告诉我。