开发了一个使用ADAL .Net v3.14进行身份验证的Web API。现在这里是获取access_token的代码(使用ADAL提供的默认TokenCache)
var provider = "https://login.microsoftonline.com/XXXXXXXX.onmicrosoft.com"
var service = "https://XXXXXXXX.onmicrosoft.com/XXXXXXService" //which is registered as service in Azure AD
var clientId = "01d2b529-XXXX-XXXX-b794-XXXXXXXXXXXX" //client app registered on Azure AD
AuthenticationContext authContext = new AuthenticationContext(provider);
UserPasswordCredential uc = new UserPasswordCredential(user, password);
AuthenticationResult result = authContext.AcquireTokenAsync(service, clientId, uc).ConfigureAwait(false).GetAwaiter().GetResult();
它成功返回Access_Token。现在,在此令牌过期1小时后,我已使用Refresh_Token实现以下代码进行更新(假设refresh_token将从缓存中获取为实现的ADAL TokenCache):
AuthenticationContext authContext = new AuthenticationContext(provider);
UserAssertion userAssertion = new UserAssertion(oldtoken, "urn:ietf:params:oauth:grant-type:jwt-bearer", upn);
AuthenticationResult result = authContext.AcquireTokenAsync(resource,clientId, userAssertion).ConfigureAwait(false).GetAwaiter().GetResult();
var token = result.AccessToken
此代码提供错误:
"无效的JWT令牌。 AADSTS50027:无效的JWT令牌。令牌格式无效"。
我查了一下'oldtoken'变量,它是有效的JWT令牌。
答案 0 :(得分:0)
您在哪里获得访问令牌?在网络API方面或客户端?
如果您使用资源所有者密码授予流程在Web api端获取访问令牌。并希望使用刷新令牌续订访问令牌。您只需要再次使用获取令牌功能,因为您正在获取令牌直接使用用户的凭证。
如果您在客户端获取访问令牌,并使用该访问令牌访问您的Web API,则客户端应用程序应负责检查有效的访问令牌并使用刷新令牌续订访问令牌。