다음은 앱에서 수행 한 작업입니다 (OAuth Refresh Token Standards).
1 단계 : 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 단계 명시된 바와 같이 귀하의 API는 표준 인증 토큰 응답을 전송해야한다 : 공유 환경 설정/로컬 캐시/로컬 데이터베이스에서 해당 응답을 저장, 우리가 공유 사용 환경 설정 (accountToken
가정 클래스의 개체 인증 토큰의 응답)
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 단계에서 만든 : 당신이 액세스 토큰을 저장 사용해야 할 때마다,이 만료되어 있지 않은지 확인
,
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
인 경우 저장된 인증 토큰을 사용하십시오. true
을 반환하면 다음 단계로 이동하십시오.
4 단계 : 같은 grant_type
세트로 다시 인증 호출을 확인 refresh_token
5 단계
stated in standards로 : 새로 고침 토큰과 새로운 refresh_token
로 1 단계에서 설명한대로 호출 표준 인증 응답을 반환해야 인증 난 당신이 잊고 생각 ''AUTH_TIME_SAVED_KEY ''를 저장하는 호출을 기록하려면 토큰이 만료되었는지 여부를 결정할 때 의존해야하므로 자유를 추가하여 추가 할 수 있습니다. :) 일반적으로이 타임 스탬프는 약간 보수적이어야합니다. 지연 (공용)은 서버가 허용하지 않을 수도 있지만 메서드가 만료되지 않는다고 말하면 (로컬에서만 확인) 말입니다. 그것은 극단적 인 경우이지만 처리 할 수 있습니다. – Gero
나는 여분의 비트를 자르는 동안 그것을 놓쳤다 고 생각한다. 추가해 주셔서 감사합니다. – adnanyousafch