【问题标题】:ADAL acquire token with username and passwordADAL 使用用户名和密码获取令牌
【发布时间】:2019-08-31 21:22:01
【问题描述】:

我正在尝试从 Xamarin Form 应用程序的 azure AD 获取令牌。我正在使用 ADAL 4+,我不希望用户每次启动应用程序时都登录。 用户已经成功登录后重新启动应用程序时,是否仍以编程方式刷新或获取令牌。

由于 ADAL 不再有 userPasswordCredientian()。我找不到任何替代解决方案。

【问题讨论】:

    标签: xamarin xamarin.forms azure-active-directory adal


    【解决方案1】:

    一旦 ADAL.NET 为用户获取令牌,它就会将其与刷新令牌一起缓存。然后下次应用程序想要一个令牌时,它应该首先调用AcquireTokenSilentAsync 来验证缓存中是否有一个可接受的令牌。如果有令牌但已过期,AcquireTokenSilentAsync 将使用缓存的刷新令牌来刷新访问令牌,如果缓存中没有令牌,则可能需要进行交互调用以让用户再次登录.

    Here's some more information on how this works in ADAL

    这是推荐的调用模式,先进行 AT 静默调用,捕获 AdalSilentTokenAcquisitionException(因为未找到令牌),然后进行 AT 交互调用。

    AuthenticationContext ac = new AuthenticationContext(authority);
    AuthenticationResult result=null;
    try
    {
     result = await ac.AcquireTokenSilentAsync(resource, clientId);
    }
    catch (AdalException adalException)
    {
     if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently
         || adalException.ErrorCode == AdalError.InteractionRequired)
      {
       result = await ac.AcquireTokenAsync(resource, clientId, redirectUri,
                                           new PlatformParameters(PromptBehavior.Auto));
      }
    }
    

    我建议迁移到 MSAL...这里是 MSAL 中的 documentation on the differences between ADAL and MSALspecifics on the username/password flow,以及如何从 ADAL.NET 4.x to MSAL.NET 2.x 和刚刚发布的 MSAL v3 api 迁移。

    【讨论】:

    • 感谢您帮助珍妮。我会测试它并告诉你。
    猜你喜欢
    • 2011-09-16
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多