【问题标题】:ADAL.NET v3 does not support AcquireToken with UserCredential?ADAL.NET v3 不支持带有 UserCredential 的 AcquireToken?
【发布时间】:2016-09-24 18:12:28
【问题描述】:

在 ADAL.NET 2.x 中,我们使用以下代码通过 UserCredential 从 Azure AD 获取令牌,并且运行良好:

 var authContext = new AuthenticationContext(Authority);
 var userCredential = new UserCredential(username, password);
 var token = authContext.AcquireToken(ResourceUrl, ClientId, userCredential);

今天升级 ADAL.NET v3 时,代码无法编译,因为在新版本上,UserCredential 没有重载的带有用户名和密码的构造函数。

如何使用新版本的 ADAL.NET v3 解决此问题?

【问题讨论】:

    标签: c# azure azure-active-directory adal


    【解决方案1】:

    使用 UserPasswordCredential 类代替,它是 UserCredential 的子类

    【讨论】:

    • 我得到 AADSTS70002:请求正文必须包含以下参数:“client_secret 或 client_assertion”。跟踪 ID:8be09594-65c2-4e2d-bce2-17980f739371 相关 ID:7312b657-f6d4-4d0b-8fc2-c66f1b9f0325 时间戳:2016-12-28 16:14:16Z
    • 您正在尝试将机密客户端 (web api) id 用于本机应用程序。您需要为您的流程创建一个新的原生应用程序 ID
    • 嘿,我正在使用它,在调试配置中它工作正常,但在发布时我得到 AADSTS50126: Invalid username or password 即使我使用相同的密码用户名,知道什么可能导致这种情况吗?
    【解决方案2】:

    试试UserPasswordCredential,这个类必须在 v3 中重命名。

    【讨论】:

      【解决方案3】:

      仅供参考,好像他们已从 ADAL 中删除了此功能。 source

      要使用用户用户名/密码组合进行身份验证,我相信您必须使用 HttpClient 并自己发出发布请求。

      发布到:

      https://login.microsoftonline.com/yourdomain.onmicrosoft.com/oauth2/token
      

      与:

      resource={resource}&client_id={clientid}&grant_type=password&username={username}&password={password}&scope=openid&client_secret={clientsecret}
      

      在请求中

      【讨论】:

      【解决方案4】:

      这解决了 UserCredentials 的问题,但您似乎也更改了 AuthenticationContext 类型,它似乎不再具有 AcquireToken 方法。您可以使用 AcquireTokenAsync 解决此问题

      【讨论】:

        猜你喜欢
        • 2019-10-07
        • 2021-06-07
        • 1970-01-01
        • 2023-03-23
        • 2020-03-18
        • 1970-01-01
        • 2018-11-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多