C# 无提示通过非Microsoft用户凭据获取访问令牌
我正在尝试在没有提示的情况下为非microsoft用户获取访问令牌 这对我来说很有效: authenticationContext.AcquireToken(资源、客户端ID、新Uri(Uri)、PromptBehavior.Always)代码> 但如果没有提示,它就不起作用。我尝试了以下两种方法:C# 无提示通过非Microsoft用户凭据获取访问令牌,c#,azure-active-directory,C#,Azure Active Directory,我正在尝试在没有提示的情况下为非microsoft用户获取访问令牌 这对我来说很有效: authenticationContext.AcquireToken(资源、客户端ID、新Uri(Uri)、PromptBehavior.Always) 但如果没有提示,它就不起作用。我尝试了以下两种方法: var authContext=新的AuthenticationContext(授权); var userCredential=新的userCredential(用户名、密码); var token=au
var authContext=新的AuthenticationContext(授权);
var userCredential=新的userCredential(用户名、密码);
var token=authContext.AcquireToken(资源、客户端ID、用户凭证)代码>
ActiveDirectory v3异常:访问WS-metadata exchange失败
ActiveDirectory v2:序列不包含任何元素
newhttprequestmessage(HttpMethod.Post,”https://login.microsoftonline.com//oauth2/token");代码>
与:
$“授权类型=密码和资源={resource}和客户端id”=
{clientId}&username={username}&password={password}“
错误描述:“AADSTS50034:要登录此应用程序,必须将帐户添加到tenantId目录
谢谢这里的问题可能只是来宾帐户的“用户名”不是“xxx@outlook.com“。当从MSA帐户(如@outlook.com或@live.com)在AAD中创建来宾帐户时,将生成一个新的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"
},
请注意userPrincipalName
的“奇怪”格式。您可以看到这是为我的@live.com帐户创建的来宾帐户。我通过在我的租户中拨打以下电话获得此信息:
GET https://graph.microsoft.com/v1.0/users
这里的解决方案可能是使用userPrincipalName
值填充username字段,这是AAD知道并期望的用户唯一ID,而不是原始MSA用户名
下一个自然问题是为什么xxx@outlook.com通过交互式登录体验登录的帐户工作?在该页面中可能会发生很多“神奇”的事情,这些事情无法使用Azure Active Directory中的资源所有者密码凭据授权进行复制
让我知道这是否解决了问题。这里的问题可能只是来宾帐户的“用户名”不是“xxx@outlook.com“。当从MSA帐户(如@outlook.com或@live.com)在AAD中创建来宾帐户时,将生成一个新的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"
},
请注意userPrincipalName
的“奇怪”格式。您可以看到这是为我的@live.com帐户创建的来宾帐户。我通过在我的租户中拨打以下电话获得此信息:
GET https://graph.microsoft.com/v1.0/users
这里的解决方案可能是使用userPrincipalName
值填充username字段,这是AAD知道并期望的用户唯一ID,而不是原始MSA用户名
下一个自然问题是为什么xxx@outlook.com通过交互式登录体验登录的帐户工作?在该页面中可能会发生很多“神奇”的事情,这些事情无法使用Azure Active Directory中的资源所有者密码凭据授权进行复制
让我知道这是否解决了问题。非Microsoft用户是什么意思?没有提示您想要实现什么?例如:xxx@outlook.com.与微软用户一样xxx@microsoft.com它可以工作。(它们都在同一租户中)。我希望动态传递用户凭据(无用户操作)怎么了xxx@outlook.com已添加到租户?作为来宾帐户?或外部帐户?您是否使用由Azure Portal?来宾帐户创建的标准AAD应用程序。是-由Azure Portal创建的标准AAD应用程序是否“非Microsoft”“用户是什么意思?如果没有提示,您试图完成什么?例如:xxx@outlook.com. 与微软用户一样xxx@microsoft.com它起作用了。(他们都在同一租户中)。我想动态地传递用户凭据(无用户操作)如何xxx@outlook.com是否已添加到租户?作为客人帐户?还是外部账户?您是否正在使用由Azure Portal?来宾帐户创建的标准AAD应用程序。是的-Azure PortalI创建的标准AAD应用程序只有唯一的\u名称,并尝试了它,但失败了。你说的“唯一的\u名称”是什么意思?价值从何而来?谢谢你,肖恩!唯一的_名称-live.com#xxx@outlook.com. 抱歉,来宾用户没有UPN。我在登录请求中看到了唯一的\u名称。嗨,Michal,我最近又玩了一些来宾用户的东西,我可以确认您为来宾用户获得的令牌不包含
upn
声明,而是唯一的\u名称
声明。如果查询用户对象,如使用/me
端点,您将在响应中看到真实的userPrincipalName
:“userPrincipalName:”shtabriz_microsoft.com#EXT#@shawntest.onmicrosoft.com“
或类似内容。我相信(尚未测试)您应该将此标识符用于资源所有者密码凭据授予。我只有唯一的\u名称,并尝试了它,但失败了。您说的“唯一的\u名称”是什么意思?价值从何而来?谢谢你,肖恩!唯一的_名称-live.com#xxx@outlook.com. 抱歉,来宾用户没有UPN。我在登录请求中看到了唯一的\u名称。嗨,Michal,我最近又玩了一些来宾用户的东西,我可以确认您为来宾用户获得的令牌不包含upn
声明,而是唯一的\u名称
声明。如果查询用户对象,如使用/me
端点,您将在响应中看到真实的userPrincipalName
:“userPrincipalName:”shtabriz_microsoft.com#EXT#@shawntest.onmicrosoft.com“
或类似内容。我相信(尚未测试)这一点