在ADAL v2中,我们这样做:
// Common parameter:
_clientCredential = new ClientAssertionCertificate(clientId, certificate);
// Get the token for the first time:
var userAssertion = new UserAssertion(accessToken, "urn:ietf:params:oauth:grant-type:jwt-bearer", userName);
_authResult = await authContext.AcquireTokenAsync(resource, _clientCredential, userAssertion);
// Refresh the token (when needed):
_authResult = await authContext.AcquireTokenByRefreshTokenAsync(authResult.RefreshToken, _clientCredential);注意,为了刷新令牌,我们只需要前面的身份验证结果和公共客户端凭据(_authResult和_clientCredential)。这很方便.
ADAL v3缺乏AcquireTokenByRefreshTokenAsync和这是解释。但这并没有具体地说,需要什么样的变革。
我们是否必须重播第一个AcquireTokenAsync (因此必须将resource、accessToken和userName存储在程序状态的某个位置)?
或者只有公共元素(_authResult和_clientCredential)才能获得最新的令牌?
发布于 2018-09-26 12:44:05
AcquireTokenSilentAsync现在提供了使用刷新令牌的机制。请参阅使用缓存令牌使用缓存令牌的AcquireTokenSilentAsync以获得使用此方法的模式。
你在利用ADAL令牌缓存吗?它可以帮助您避免管理代码中使用刷新令牌的底层实现细节以及您面临的问题。
发布于 2018-11-06 09:02:35
ADAL 3.x中推荐的代表流的方法是使用:
try
{
result = await ac.AcquireTokenSilentAsync(resource, clientId);
}
catch (AdalException adalException)
{
if (adalException.ErrorCode == AdalError.FailedToAcquireTokenSilently ||
adalException.ErrorCode == AdalError.InteractionRequired)
{
result = await ac. AcquireTokenAsync (resource, clientCredentials, userAssertion);
}
}请注意,在有些情况下,您可以缓存使用ADAL.NET v2.x获得的刷新令牌,并且为了帮助从adal2.x迁移到MSAL.NET,我们计划在MSAL.NET中重新引入AcquireTokenByRefreshToken (但不是在adal4.x中)。
https://stackoverflow.com/questions/52509883
复制相似问题