ADAL 使用用户名和密码获取令牌

ADAL acquire token with username and password

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

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

一旦 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...这里是 documentation on the differences between ADAL and MSAL and specifics on the username/password flow in MSAL and how to migrate from ADAL.NET 4.x to MSAL.NET 2.x and the just released MSAL v3 api