에서 토큰 갱신을 새로 고칩니다. OpenId Connect를 사용하여 타사 플랫폼을 인증 서버로 사용하고 있습니다. 기본적으로 내 문제는 만료 된 새로 고침 토큰을 처리하고 싶다는 것입니다.OAuth2를 내가 보안 리소스에 액세스하기 위해 허가를 얻기 위해 OAuth2를 토큰을 사용하는 안드로이드 응용 프로그램을 개발하고 있어요 안드로이드
현재 시나리오는
나는 싱글 같은 역할 및 보안 나머지 템플릿을 사용하여 내 모든 요청을 관리하는 NetUtils
클래스를 가지고있다. 이 나머지 템플리트는 요청 랩퍼를 사용하여 각 요청에 대해 필요한 Authorization 헤더를 주입합니다. NetUtils
클래스는 whith 토큰과 타임 아웃을 처리하여 사용자 환경 설정에 저장하고 필요할 때 새로 고칩니다. 새로 고침 토큰 자체가 만료 될 때
다른 선택은 새로 고침 토큰을 오래하고 예를 들어 앱은 시작될 때마다 새로 고침하는 것
private AccessToken refreshToken(String idClient, String clientSecret, AccessToken accessToken) {
MultiValueMap<String, String> clientAuthenticationForm = new LinkedMultiValueMap<>();
clientAuthenticationForm.add("grant_type", "refresh_token");
clientAuthenticationForm.add("refresh_token", accessToken.getRefreshToken());
clientAuthenticationForm.add("client_id", idClient);
clientAuthenticationForm.add("client_secret", clientSecret);
try {
long lastClientRefresh = mPrefs.getLong(Preferences.LAST_LOGIN_TIME, Long.MIN_VALUE);
boolean refreshTokenExpired = lastClientRefresh
+ TimeUnit.SECONDS.toMillis(accessToken.getRefreshExpiresIn()) < System
.currentTimeMillis();
if (!refreshTokenExpired) {
return regularRestTemplate
.postForEntity(tokenUrl(), clientAuthenticationForm, AccessToken.class)
.getBody();
}else{
//How to cope with this?
return null;
}
} catch (Exception ex) {
Log.e(TAG, ex.getMessage(), ex);
throw ex;
}
}
다른 선택 : 여기가 액세스 토큰을 새로 내 코드입니다. 나는 client_id가이고 은 client_secret이 현재 앱에 하드 코딩되어 있음을 언급해야한다. (클라이언트 자격증은 프로덕션 환경에서 사용할 수 없으므로 토큰을 검색하기 위해 여전히 사용자 이름과 암호를 제공해야한다.)
는 여기에서 가장 좋은 방법이 될 것입니다?
답변 해 주셔서 감사합니다. 그것은 결국 내가 구현 한 것입니다. –