【问题标题】:How to validate the Access Token in OAuth 2.0?如何验证 OAuth 2.0 中的访问令牌?
【发布时间】:2019-06-01 22:55:11
【问题描述】:

如何验证Access Token以及如何使用Access Token获取token信息?

这是验证访问令牌的网址吗?

https://mydomain/oauth2/v1/tokeninfo?access_token=tYPJr7F6ArYkd1Vdlh1gbhWlnz8NLA9TZmky2NpvaHZxhw14udbmFNRG1pKMKVEY&token_type=bearer

【问题讨论】:

    标签: android python ios oauth-2.0 access-token


    【解决方案1】:

    这是从令牌中获取数据的示例(示例来自 Azure auth - 但两者都使用 OAuth2 并不重要)。

    这就是您从 Token 中提取信息的方式:

    getAuthInteractiveCallback()getAuthSilentCallback() 方法中:

    private AuthenticationCallback getAuthSilentCallback() {
        return new AuthenticationCallback() {
            @Override
            public void onSuccess(AuthenticationResult authenticationResult) {
                /* Successfully got a token, call api now */
                Log.d(TAG, "Successfully authenticated");
                Log.d(TAG, "ID Token: " + authenticationResult.getIdToken());
                Log.d(TAG, "ID Token: " + authenticationResult.getAccessToken());
    
                try {
                    String token = authenticationResult.getIdToken();
                    String token2 = token.substring(token.indexOf('.') + 1, token.lastIndexOf('.'));
                    byte[] data = Base64.decode(token2, Base64.DEFAULT);
                    String text = new String(data, StandardCharsets.UTF_8);
                    JSONObject jsonObject = new JSONObject(text);
                    JSONArray jsonArray = new JSONArray(jsonObject.getString("emails"));
                    String eMail = jsonArray.get(0).toString();
                    Log.d(TAG, "eMail: " + eMail);
    
                } catch (JSONException ex) { }
    
    
    
                authResult = authenticationResult;
                state.setAuthResult(authResult);
            }
    
            @Override
            public void onError(MsalException exception) {
            }
    
            @Override
            public void onCancel() {
            }
        };
    }
    

    另外可以获取iod、过期时间(exp)、授权时间(auth_time)、版本(ver)

    【讨论】:

    • 感谢您的回复
    • { “ACCESS_TOKEN”: “tYPJr7F6ArYkd1Vdlh1gbhWlnz8NLA9TZmky2NpvaHZxhw14udbmFNRG1pKMKVEY”, “refresh_token”: “G2VAeO5ifslKTVRduT4fedjTol0hEnxkXnt0j4D8fZeeJmBvVSHyaHzYqVV0UsO3”, “id_token”: “k6pjMC0kaKMTbIKtlrlf30nshiWYHFKQ12XbVrwQ92l1e4Tq7meDWDGr7dtCFgCGmDDpPxMkxgHw1Zjt8vVnftxqzxe_DOduECMr6LgNIgDNU2Qj-jOK4Y4t4Fv3539c_fA6C6P-Ae4ssb5NFvCZjtTixyH1pqA”, “token_type”: “承载”, “expires_in”:599 } 我得到了上面的访问令牌响应
    • 我想通过 access_token 值验证 access_token
    • 我的意思是服务器端验证,如果我将 access_token 传递给服务器,他们将根据令牌验证我。我想要确切的 API 来验证我身边的令牌
    • 您不需要确保每次都重新检查令牌,这就是为什么您有一个到期日期。在 AOuth2 中,您有一个静默登录功能 - 如果您需要重新连接等,已经使用令牌管理整个事情。
    猜你喜欢
    • 2019-08-08
    • 2013-11-26
    • 2012-08-31
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多