Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无提示通过非Microsoft用户凭据获取访问令牌_C#_Azure Active Directory - Fatal编程技术网

C# 无提示通过非Microsoft用户凭据获取访问令牌

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

我正在尝试在没有提示的情况下为非microsoft用户获取访问令牌

这对我来说很有效: authenticationContext.AcquireToken(资源、客户端ID、新Uri(Uri)、PromptBehavior.Always)

但如果没有提示,它就不起作用。我尝试了以下两种方法:

  • 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目录

  • 我使用的用户在我尝试登录的租户中,它使用了prompt。 我想知道为什么它不适用于其他两种方式


    谢谢

    这里的问题可能只是来宾帐户的“用户名”不是“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“
    或类似内容。我相信(尚未测试)这一点