2013-07-01 2 views
17

사용자 이름/비밀번호로 인증하고 후속 요청에 대한 인증 토큰을받는 서버가있는 경우이 문제를 해결하는 가장 좋은 방법은 무엇입니까?발리와의 토큰 인증

흐름은 다음과 같이해야합니다 : - 요청 시작 - 우리가 인증 토큰이없는 경우 - 사용자 이름과 암호 으로 얻을 - 함께 요청을 인증 토큰 - 요청 토큰 만료 때문에 실패하면, 새로운 도착 인증 사용자 이름과 암호 와 토큰 - 마침

내가 발리는 이미이 문제를 해결할 수있는 뭔가있을 수 있습니다 것으로 나타났습니다 - - 인증 자 https://android.googlesource.com/platform/frameworks/support/+/4474bc11f64b2b274ca6db5a1e23e8c1d143d5fa/volley/src/com/android/volley/toolbox/Authenticator.java 그것은 getAuthToken()와 invalidateAuthToken을 포함() 메서드 새로운 인증 토큰 로 요청을 다시 시도 그것은 내가 원하는 것입니다. 그러나 도서관에서 전혀 사용 된 적이없는 것으로 보입니다.

+0

방금 ​​소스를 확인했는데 인증 코드가 코드에서 사용되지 않은 것처럼 보입니다. 아마 당신은 그것을 수동으로해야 할 것입니다. – negersiu

+0

예. 그동안 BasicNetwork 클래스를 복사하고 나를 위해 인증을 수행하도록 조정했습니다. – MantasV

+2

당신이 어떻게 대답했는지 게시 할 수 있습니까? –

답변

11

필자는 longlive (LLT) 및 shortlive (SLT) 토큰을 사용하는 인증 시스템에 발리를 사용했습니다.

나는 그것을 수동으로 만들었지 만 실제로 모든 것을 배치하면 실제로 많은 작업을하지는 못했다.

모든 보안 요청의 onResponse() 및 onErrorResponse()에서 모든 보안 요청에 공통 인이 토큰 메커니즘을 처리 할 수있는 baseSecureRequest를 서브 클래스 화하십시오.

요청이 다른 요청을 보내고 콜백을 기다리는 약간의 node.js 스타일이됩니다. 각각의 화면은 요청의 요구 사항에 관해서는 무지해야한다 -


앱은 절반 만 인증 액세스를 필요로 다스 화면을 가질 수있다.

대본

  • 우리는 보안 요청을 보내려고. 메모리에 SLT가 없으므로 TokenRequest를 확인하십시오. 메모리 토큰 저장()
  • TokenRequest의 onResponse는
  • 지금 새로 업데이트를 계속 원래 구체적인 수준의 요청 객체에 콜백 (IT 또는 유사한 전 현재 클래스에 싱글 세션 관리자가 유지하자) 토큰.

시나리오 B

  • 우리는 보안 요청을 보낼 수 있지만, 우리의 SLT가 부실 (만료)

  • 서버는 당신이 에 잡을 수있는 오류 코드 나 MSG를 반환 baseSecureRequest의 일반적인 onErrorResponse()입니다.

  • 이 LLT를 사용하여 서버에서 새 SLT를 요청하여 메모리의 SLT를 새로 고치려고하는 refreshTokenRequest() 객체를 보내십시오.

  • refreshTokenRequest의 onResponse()가 원래의 다시 요청 인 으로 콜백 할 수 있습니다.

  • 그러나 가능성은 입니다. 연결 오류가 아니기 때문에 LLT가 잘못되어 오류가 발생합니다. 따라서 onErrorResponse()는 모든 것을 포기해야합니다. 나쁜 LLT로 새로 고치려고 계속 노력한다면 결코 나가지 않을 것입니다.
+9

@mjw ... 이에 대한 예제 코드가 있습니까? –

+4

나는이 모션, 어떤 코드를 초? – CQM

+2

동의합니다. 이를위한 몇 가지 예제 코드를 얻을 수 있습니까? – HariKJ

1
  1. 인증 및 승인을 위해 Android에 AccountManager API을 사용할 수 있습니다. 블로그 here을 팔로우하십시오.
  2. OAuth 2.0 서버 측 구현의 경우 IETF 초안 V2-31 here을 읽을 수 있습니다.
  3. OAuth 2.0에 대한 이해를 돕기 위해 Nitesh Kumarhere으로 블로그를 읽을 수 있습니다.
  4. OAuth 2.0의 서버 측 구현을 위해 Github에서 Apis Autherization Server 메시지를 포크 할 수 있습니다.
  5. 더 많은 구현 옵션은 OAuth 2.0 here의 웹 사이트에서 찾을 수 있습니다.
+0

응답 해 주셔서 감사합니다. 그러나 제 질문은 구체적으로 Volley에 관한 것입니다. 인증을 수행하는 방법이 아니라 Volley와 통합하는 방법 – MantasV

+0

AndroidAuthenticator는 accountManager를 사용하는 것 같지만 AndroidAuthenticator를 어떻게 사용해야하는지 잘 모르겠습니다. –

1

이 블로그 게시물을 보았습니까? https://smaspe.github.io/2013/06/06/volley-part2.html

트위터 토큰을 사용하도록 요청 개체를 재정의하는 간단한 방법을 보여줍니다.

@Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     Map<String, String> headers = new HashMap<String, String>(); 
     String auth = "Basic " 
       + Base64.encodeToString((TwitterValues.CONSUMER_KEY 
       + ":" + TwitterValues.CONSUMER_SECRET).getBytes(), 
         Base64.NO_WRAP); 
     headers.put("Authorization", auth); 
     return headers; 
    } 
+0

링크 다운. 이렇게 다른 게시물이 있습니까? – davidbonachera

+1

@davidbonachera 링크 된 블로그가 최근에 이동 (및 이름이 변경됨)되어 링크가 업데이트되었습니다. – njzk2

+0

이 링크는 질문에 대답 할 수 있지만 답변의 핵심 부분을 여기에 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [검토 중] (리뷰/저품절 게시물/18821940) –

-2

getToken(). 상태 BAD_AUTHENTICATION 오류

나는 또한 같은 문제에 직면했다.

해결책 : 기기가 Google 계정에 로그인되어 있는지 확인합니다.

+0

답변이나 새로운 질문이 있습니까? –