Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用刷新令牌从带有Xamarin.Forms客户端的identity server 4获取新的访问令牌_Xamarin.forms_Identityserver4_Refresh Token - Fatal编程技术网

如何使用刷新令牌从带有Xamarin.Forms客户端的identity server 4获取新的访问令牌

如何使用刷新令牌从带有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() {

如何在Xamarin.Forms客户端中使用refresh_令牌从identity server获取新的访问令牌

我遵循教程,在IS4上创建了带有身份验证的xamarin forms移动应用程序。我将访问令牌生存期设置为几分钟。访问令牌过期后(例外情况),应用程序将无法再访问授权的端点。我有一个刷新令牌,但我不知道如何使用它从identity server获取新的访问令牌

is4配置中指定的客户端:

            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)); 返回结果; }
您好,您找到解决方案了吗?我也有同样的问题。