Header

  1. View current page

    권남이의 스프링노트

Profile_img_60x60_01
20

OAuth

OAuth

 

인증 흐름

svn/spec/branches/1.0/drafts/4/diagram.png

이 과정이 있기전에 Consumer는 이미 Provider에게 자기 자신을 등록해 놓고 있어야 한다.

 

A. Consumer가 Provider에게 Request Token을 요청한다. (Server To Server)

B. Provider가 Consumer에게 Request Token을 발급한다. (Server To Server)

C. Consumer가 사용자를 Provider로 보낸다. : 사용자 인증 Authorize 요청 (Browser Redirection)

D. Provider가 사용자를 Consumer로 보낸다. : 사용자 인증 토큰을 생성해서 반환 (Browser Redirection)

E. Consumer가 Provider에게 Access Token을 요청한다. - RequestToken을 AccessToken으로 바꾸는 작업 (Server To Server)

F. Provider가 Access Token을 발급한다. (Server To Server)

G. 이제 Access Token을 사용하여 Consumer가 Provider에 저장된 사용자의 개인 정보를 사용한다. Request Token은 더이상 의미가 없다. : 일반적인 OpenAPI 사용방식

 

Provider

OpenAPI를 이용해서 서비스를 제공하는 웹 애플리케이션

 

  • Provider Application이 할 일

    • Consumer 등록 받고 목록 저장 : consumer key, consumer_secret, consumer_callback_url 을 기반으로 OAuthConsumer 객체를 생성해 둔다.

      • 컨슈머에게 컨슈머 키를 발급 하는 과정을 제공해 준다.
      • 컨슈머가 여럿일 경우, Map에 컨슈머 키를 기준으로 OAuthConsumer 객체를 저장해둔다.
    • Consumer 객체 가져오기

      • Consumer가 보낸 요청 OAuthMessage 객체에서 getConsumerKey() 메소드로 컨슈머 키를 구분한뒤, 미리 저장해둔 컨슈머 객체를 이 키값을 기준으로 가져온다.
    • RequestToken 요청 받기
    • Authorization 사용자 인증 : 사용자를 로그인 시킨다고 보면 된다.
    • AccessToken 컨트롤러 제공
    • 실제 작업을 하는 API 제공

      1. // 모든 인증 과정이 정확히 끝났는지 확인한다.
      2. OAuthMessage requestMessage = OAuthServlet.getMessage(request, null);
        OAuthAccessor accessor = SampleOAuthProvider.getAccessor(requestMessage);
        requestMessage.validateSignature(accessor);
      3.  
      4. // 앞선 과정에서 OAuthAccessor 객체에 API 호출에 필요한 정보들을 저장해 두고, 실제 API에서 이를 사용한다.

      5. String userId = (String) accessor.getProperty("user");

 

 

Consumer

Provider가 제공하는 서비스를 OpenAPI를 통해서 사용하는 프로그램 혹은 웹 애플리케이션.

 

  • Consumer Application이 할 일

    • Provider에서 Consumer Key와 Consumer Secret을 발급받는다. 이것은 사용자 키와는 무관한 것이다.
    • OAuthClient 객체를 생성한다.
    • OAuthConsumer 객체를 생성한다.
    • OAuthAccessor 객체를 얻는다.
    • OAuth 파라미터를 파싱한다.
    • 요청용 OAuthMessage 생성한다.
    • OAuthClient객체.invoke(요청용 OAuthMessage객체)로 요청을 보내고 응답용 OAuthMessage 객체를 받는다.
    • OAuthMessage객체.getBodyAsString() 으로 응답 바디를 가져올 수 있다.

History

Last edited on 03/11/2008 18:08 by kwon37xi

Comments (0)

You must log in to leave a comment. Please sign in.