GVKun编程网logo

Msal.js 2.2 PKCE授权流程刷新令牌丢失(刷新令牌错误)

10

对于Msal.js2.2PKCE授权流程刷新令牌丢失感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解刷新令牌错误,并且为您提供关于android–无法获得谷歌播放授权的刷新令牌、angula

对于Msal.js 2.2 PKCE授权流程刷新令牌丢失感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解刷新令牌错误,并且为您提供关于android – 无法获得谷歌播放授权的刷新令牌、angular2 – 使用rxjs处理刷新令牌、AngularJS-处理刷新令牌?、aws php刷新令牌,没有返回刷新令牌的宝贵知识。

本文目录一览:

Msal.js 2.2 PKCE授权流程刷新令牌丢失(刷新令牌错误)

Msal.js 2.2 PKCE授权流程刷新令牌丢失(刷新令牌错误)

尝试在offline_access中设置scopes

scopes: ["openid","profile","offline_access","User.Read"]

android – 无法获得谷歌播放授权的刷新令牌

android – 无法获得谷歌播放授权的刷新令牌

我无法获得Google Play授权的刷新令牌.

我按照Google Play Android Developer中的说明操作
API授权页面.我创建了一个OAuth 2.0客户端ID.我成功获得了客户端ID.我把所有的信息都放在了
获取刷新令牌的URI,我发送请求,我提示
用于“允许访问”.当我点击“允许访问”时,我得到一个无法访问
连接错误.
这是我的URI:

https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/androidpublisher&response_type=code&access_type=offline&redirect_uri=https://localhost/oauth2callback&client_id=345674341799.apps.googleusercontent.com

解决方法

当您创建“Web”类型的客户端ID并调用/ o / oauth2 / auth服务时,您的用户代理(/ browser)将尝试重定向URI.如果它像你的例子中那样是假的(这是默认的)那么用户代理当然会失败.授权代码仍然是失败URL的参数部分,但可能并不明显.

使用授权代码,您需要使用正确的POST命令调用/ o / oauth2 / token服务.我很犹豫是否指向一个特定的Google指令页面,因为它们可能是出了名的不完整,矛盾和过时,但这个是对整个过程https://developers.google.com/accounts/docs/OAuth2WebServer的合理概述.

要记住的一件事是,第一次成功调用给定客户端ID的/ o / oauth2 / token将返回难以捉摸的刷新令牌,但除非您重试/ o / oauth2 / auth服务,否则不会再次返回提供URL参数approval_prompt = force.这一点信息是你阅读这篇文章的奖励,可以为你节省数小时毫无意义的挫败感.

angular2 – 使用rxjs处理刷新令牌

angular2 – 使用rxjs处理刷新令牌

因为我已经开始与angular2我已经设置我的服务返回Observable的T.在服务我会有map()调用,使用这些服务的组件只使用subscribe()等待响应。对于这些简单的方案,我did not真的需要挖入到rxjs所以一切OK。

我现在想实现以下:我使用Oauth2身份验证与刷新令牌。我想构建一个api服务,所有其他服务将使用,并将透明地处理刷新令牌时返回401错误。因此,在401的情况下,我首先从OAuth2端点提取新的令牌,然后使用新的令牌重试我的请求。下面是代码工作正常,与promises:

request(url: string,request: RequestOptionsArgs): Promise<Response> {
    var me = this;

    request.headers = request.headers || new Headers();
    var isSecureCall: boolean =  true; //url.toLowerCase().startsWith('https://');
    if (isSecureCall === true) {
        me.authService.setAuthorizationHeader(request.headers);
    }
    request.headers.append('Content-Type','application/json');
    request.headers.append('Accept','application/json');

    return this.http.request(url,request).toPromise()
        .catch(initialError => {
            if (initialError && initialError.status === 401 && isSecureCall === true) {
                // token might be expired,try to refresh token. 
                return me.authService.refreshAuthentication().then((authenticationResult:AuthenticationResult) => {
                    if (authenticationResult.IsAuthenticated == true) {
                        // retry with new token
                        me.authService.setAuthorizationHeader(request.headers);
                        return this.http.request(url,request).toPromise();
                    }
                    return <any>Promise.reject(initialError);
                });
            }
            else {
                return <any>Promise.reject(initialError);
            }
        });
}

在上面的代码中,authService.refreshAuthentication()将获取新令牌并将其存储在localStorage中。 authService.setAuthorizationHeader将“授权”标头设置为以前更新的标记。如果你看看catch方法,你会看到它返回一个promise(对于刷新令牌),在它的轮到最终将返回另一个promise(对于实际的第二次尝试的请求)。

我试图这样做,而不诉诸承诺:

request(url: string,request: RequestOptionsArgs): Observable<Response> {
    var me = this;

    request.headers = request.headers || new Headers();
    var isSecureCall: boolean =  true; //url.toLowerCase().startsWith('https://');
    if (isSecureCall === true) {
        me.authService.setAuthorizationHeader(request.headers);
    }
    request.headers.append('Content-Type',request)
        .catch(initialError => {
            if (initialError && initialError.status === 401 && isSecureCall === true) {
                // token might be expired,try to refresh token
                return me.authService.refreshAuthenticationObservable().map((authenticationResult:AuthenticationResult) => {
                    if (authenticationResult.IsAuthenticated == true) {
                        // retry with new token
                        me.authService.setAuthorizationHeader(request.headers);
                        return this.http.request(url,request);
                    }
                    return Observable.throw(initialError);
                });
            }
            else {
                return Observable.throw(initialError);
            }
        });
}

上面的代码没有做我期望的:在200响应的情况下,它正确地返回响应。然而,如果它捕获401,它将成功检索新令牌,但订阅wil最终检索一个observable而不是响应。我猜这是未执行的Observable,应该做重试。

我意识到,将承诺的工作方式转换到rxjs库可能不是最好的方式去,但我没有能够抓住“一切都是流”的事情。我已经尝试了一些其他解决方案涉及flatmap,retrywhen等…但没有得到远,所以一些帮助是赞赏。

从快速查看你的代码,我会说,你的问题似乎是,你不是flattening从刷新服务返回的Observable。

catch操作符期望您将返回一个Observable,它将连接到失败的Observable的结尾,以使下游Observer不知道差异。

在非401情况下,您通过返回一个重新抛出初始错误的Observable来正确地执行此操作。但是在刷新情况下,你返回一个Observable,产生更多的Observable,而不是单个值。

我建议你更改刷新逻辑为:

return me.authService
             .refreshAuthenticationObservable()
             //Use flatMap instead of map
             .flatMap((authenticationResult:AuthenticationResult) => {
                   if (authenticationResult.IsAuthenticated == true) {
                     // retry with new token
                     me.authService.setAuthorizationHeader(request.headers);
                     return this.http.request(url,request);
                   }
                   return Observable.throw(initialError);
    });

flatMap将中间Observables转换为单个流。

AngularJS-处理刷新令牌?

AngularJS-处理刷新令牌?

我正在使用AngularJS构建SPA,并与服务(JAVA)通信。

当用户发送其用户名/密码时,服务会同时发送回:Acces令牌和Refresh令牌。我正在尝试处理:如果收到状态为401的响应,请发送回刷新令牌,然后再次发送您的上一个请求。我试图通过包含$
http来做到这一点,但是angular不允许我在此拦截器中包含它。有什么方法可以使用我正在接收的响应参数来重新创建原始请求吗?

就像是:

  1. 我得到401
  2. 保存我的请求
  3. 如果我有刷新令牌,请发送该刷新令牌
  4. 成功后,重新发送我的请求
  5. 错误时重定向到/ login页面
        'use strict';

    angular.module('testApp')
        .factory('authentificationFactory',function($rootScope,$q,$window,$location,CONF) {

    return {
        request: function(config) {
            config.headers = config.headers || {};
            if ($window.sessionStorage.token) {
                config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
            }
            console.log(config);
            $rootScope.lastRequest = config;
            return config;
        },response: function(response) {
            console.log($rootScope.lastRequest);
            if (response.status === 401) {
                if ($window.sessionStorage.refreshToken) {

                    //Save,request new token,send old response
                    //if it fails,go to login

                    $location.url('/login');
                } else {
                    $location.url('/login');
                }
            }
            return response || $q.when(response);
        }
    };
    });

奖励问题(主要问题更重要):有2个移动应用程序也将连接到我的服务,当我从Web应用程序登录时,以及稍后从我的移动应用程序登录后,移动应用程序将使用新的刷新令牌而且我的网络应用的刷新令牌不再有效。处理该问题的最佳选择是什么?

谢谢您的时间,最好的问候

aws php刷新令牌,没有返回刷新令牌

aws php刷新令牌,没有返回刷新令牌

如何解决aws php刷新令牌,没有返回刷新令牌?

我有aws sdk @R_301_6254@ cognito来刷新令牌,

    public function refreshToken($username,$refreshToken)
    {
        try {
            $response = $this->client->initiateAuth([
                ''AuthFlow'' => ''REFRESH_TOKEN_AUTH'',''AuthParameters'' => [
                    ''SECRET_HASH'' => $this->cognitoSecretHash($username),''REFRESH_TOKEN'' => $refreshToken
                ],''ClientId'' => $this->client_id,]);
        } catch (CognitoIdentityProviderException $exception) {
            if ($exception->getAwsErrorCode() === self::NOT_AUTHORIZED) {
                $this->add_error(''You are unauthorized to access this resource'');
                return false;
            }

            throw $exception;
        }

        return $response;
    }

对于刷新令牌返回成功200,但是对于缺少AuthenticationResult中的返回RefreshToken:

[
    ''AuthenticationResult'' => [
        ''Accesstoken'' => ''<string>'',''ExpiresIn'' => <integer>,''IdToken'' => ''<string>'',''RefreshToken'' => ''<string>'',// return missing RefreshToken
        ''TokenType'' => ''<string>'',],...
]

为什么缺少AuthenticationResult中的RefreshToken?如果无法提供InitialAuth REFRESH_TOKEN_AUTH的结果,我无法再次刷新令牌吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

关于Msal.js 2.2 PKCE授权流程刷新令牌丢失刷新令牌错误的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于android – 无法获得谷歌播放授权的刷新令牌、angular2 – 使用rxjs处理刷新令牌、AngularJS-处理刷新令牌?、aws php刷新令牌,没有返回刷新令牌等相关内容,可以在本站寻找。

本文标签: