gpt4 book ai didi

Android/IOS Secret 到期管理与客户端凭据流程

转载 作者:行者123 更新时间:2023-11-28 18:08:42 25 4
gpt4 key购买 nike

我想知道是否有任何管理移动设备中的 secret 过期的策略。

在授权服务器允许移动客户端使用资源所有者密码流结合客户端凭据对他进行授权的场景中,客户端 secret 具有到期时间。

我已经看到至少有一些方法可以在 Android 应用程序上安全地存储 secret ,但是,您如何在不发布新版本应用程序的情况下管理 secret 过期?

最佳答案

这就是我们在 OAuth Refresh Token Standards 之后在我们的应用程序中所做的.

第 1 步:您的 API 应该发送标准的身份验证 token 响应,如 here 所述

 HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}

第 2 步:将响应保存在共享首选项/本地缓存/本地数据库中,我们使用了共享首选项(假设 accountToken 是从 Auth Token 的响应创建的类的对象)

SharedPreferences.Editor editor = getContext().getSharedPreferences("AUTH_PREFS_NAME", Context.MODE_PRIVATE).edit();
editor.putString("AUTH_ACCESS_TOKEN_KEY", accountToken.getAccess_token());
editor.putString("AUTH_REFRESH_TOKEN_KEY", accountToken.getRefresh_token());
editor.putLong("AUTH_EXPIRES_IN_KEY", accountToken.getExpires_in());
editor.putLong("AUTH_TIME_SAVED_KEY", ((int) (System.currentTimeMillis() / 1000)));
editor.commit();

第 3 步:每次您必须使用保存的访问 token 时,确保它没有过期

public boolean needsTokenRefresh(String accessToken) {
if (accessToken == null || accessToken.length() == 0) {
// no access token to refresh. Don't refresh.
return false;
}

SharedPreferences pref = mContext.getSharedPreferences("AUTH_PREFS_NAME", Context.MODE_PRIVATE);
String refreshToken = pref.getString("AUTH_REFRESH_TOKEN_KEY", null);
if (refreshToken == null || refreshToken.length() == 0) {
// no refresh token. Can't refresh.
return false;
}

Integer timeSaved = pref.getInt("AUTH_TIME_SAVED_KEY", 0);
if (timeSaved == 0) {
// No recording of having saved the token. Don't refresh.
return false;
}

long expiresIn = pref.getLong("AUTH_EXPIRES_IN_KEY", 0);
int now = (int) (System.currentTimeMillis() / 1000);
int timePassed = Math.abs(now - timeSaved);
boolean expired = false;
if (expiresIn <= timePassed) {
expired = true;
}
return expired;
}

如果 needsTokenRefresh() 返回 false,则使用保存的 Auth Token。如果它返回 true 则转到下一步。

第 4 步:将 grant_type 设置为 refresh_token 作为 stated in standards 再次进行身份验证调用

第 5 步:身份验证调用应返回标准身份验证响应,如第 1 步中所述,并刷新 token 和新的 refresh_token

关于Android/IOS Secret 到期管理与客户端凭据流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46687329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com