如何使用刷新令牌从带有Xamarin.Forms客户端的identity server 4获取新的访问令牌
如何在Xamarin.Forms客户端中使用refresh_令牌从identity server获取新的访问令牌 我遵循教程,在IS4上创建了带有身份验证的xamarin forms移动应用程序。我将访问令牌生存期设置为几分钟。访问令牌过期后(例外情况),应用程序将无法再访问授权的端点。我有一个刷新令牌,但我不知道如何使用它从identity server获取新的访问令牌 is4配置中指定的客户端:如何使用刷新令牌从带有Xamarin.Forms客户端的identity server 4获取新的访问令牌,xamarin.forms,identityserver4,refresh-token,Xamarin.forms,Identityserver4,Refresh Token,如何在Xamarin.Forms客户端中使用refresh_令牌从identity server获取新的访问令牌 我遵循教程,在IS4上创建了带有身份验证的xamarin forms移动应用程序。我将访问令牌生存期设置为几分钟。访问令牌过期后(例外情况),应用程序将无法再访问授权的端点。我有一个刷新令牌,但我不知道如何使用它从identity server获取新的访问令牌 is4配置中指定的客户端: new Client() {
new Client()
{
ClientId = "xamarin-client",
ClientName = "Xamarin client",
AllowedGrantTypes = { "authorization_code" },
AllowedScopes = {"openid", "profile", "values-api" },
AllowAccessTokensViaBrowser = true,
AllowOfflineAccess = true,
AlwaysIncludeUserClaimsInIdToken = true,
RequirePkce = true,
RequireClientSecret = false,
RedirectUris = { "https://iglooidentityserver.azurewebsites.net/grants" },
AccessTokenLifetime = 180,
}
我使用的验证器:
var oAuth = new OAuth2AuthenticatorEx(
"xamarin-client",
"offline_access values-api",
new Uri("https://iglooidentityserver.azurewebsites.net/connect/authorize"),
new Uri("https://iglooidentityserver.azurewebsites.net/grants"))
{
AccessTokenUrl = new Uri("https://iglooidentityserver.azurewebsites.net/connect/token"),
ShouldEncounterOnPageLoading = false,
};
var presenter = new OAuthLoginPresenter();
presenter.Completed += Presenter_Completed;
presenter.Login(oAuth);
我在一个老项目中处理了这个问题,如下所示,希望这对您有所帮助 公共异步任务GetAccessToken() { if(_authService.AuthAccessTokenExpireIn-DateTime.Now).TotalMinutes<10){ var authResponse=await GetRefreshTokenAsync(_authService.AuthRefreshToken); _authService.AuthAccessToken=authResponse.AccessToken; _authService.AuthRefreshToken=authResponse.RefreshToken; _authService.AuthAccessTokenExpireIn=authResponse.ExpireIn; } 返回_authService.AuthAccessToken; } 公共异步任务GetRefreshTokenAsync(字符串currentRefreshToken) { string data=string.Format(“grant_type=refresh_token&client_id={0}&client_secret={1}&refresh_token={2}”,GlobalSetting.Instance.ClientId,GlobalSetting.Instance.ClientSecret,refreshttoken); var token=wait PostAsync(_httpClient, GlobalSetting.Instance.TokenEndpoint, 数据); 返回令牌; } 公共异步任务PostAsync(HttpClient HttpClient,字符串uri,对象数据) { var content=newstringcontent(JsonConvert.SerializeObject(数据)); content.Headers.ContentType=新的MediaTypeHeaderValue(“application/x-www-form-urlencoded”); HttpResponseMessage response=等待httpClient.PostAsync(uri,内容); 等待HandlerResponse(响应); string serialized=wait response.Content.ReadAsStringAsync(); UserToken result=wait Task.Run(()=>JsonConvert.DeserializeObject(序列化,_serializerSettings)); 返回结果; }
您好,您找到解决方案了吗?我也有同样的问题。