Client
는 OAuth 2.0
프로토콜을 개시하기에 앞서, Authorization Server
에 등록이 되어있어야 한다. 이러한 등록 방법은 RFC 6749
에서 정의하지는 않지만, 가장 일반적인 방법은 HTTP
폼을 이용하는 것이다.
더 나아가 굳이 Client
와 Authorization Server
가 직접적으로 등록절차를 밟을 필요도 없다. 예를 들어 Authorization Server
가 Client
를 신뢰할만한 채널에서 직접 찾을 수도 있다. 하지만 우리는 가장 일반적인 방법인 HTTP
폼을 이용하는 방법으로 구현할 것이다.
Authorization Server
에 등록할 때, Client
는 다음과 같은 정보를 입력해야 한다.
Authorization Server
에서 필요로 하는 정보RFC 6749
에서는 다음과 같이 2가지 종류의 Client Type을 정의하고 있다.
confidential
Client
가 credential
을 안전하게 보관할 수 있는 경우
public
Client
가 credential
을 안전하게 보관할 수 없는 경우
Resource Owner
에서 실행되어 코드가 유출될 수 있는 경우Authorization Server
는 각 Client
를 구분하기 위한 문자열이 필요하다. 이 문자열은 유출되어도 상관 없는 값이므로, 안전하게 보관할 필요는 없다. 다만 그렇기 때문에 Authorization Server
는 이 값만으로 Client
인증을 처리하면 안 된다.
이 문자열에 대한 길이는 정의되어 있지 않다. Authorization Server
가 적절하게 구현하면 되는데, 모든 Client
를 고유하게 구분할 수 있음을 감안하고 길이를 정의해야 된다.
또, 되도록이면 Authorization Server
는 이 값을 Client
가 확인할 수 있도록 문서화 해주는 것이 좋다.
클라이언트 등록절차 결과로 받은 credential
값으로 Client
는 Authorization Server
에서 요구하는 방법으로 인증 절차를 밟을 수 있다.
일반적인 경우 credential
값은 비밀번호와 같은 특정 해쉬문자열일 수 있다. 외부 API
서비스를 사용해본 개발자들은 알겠지만 대개 서비스에 등록을 하고 나면 API key
값을 얻게 되는데, 이 값이 바로 RFC 6749
에서 의미하는 Client Authentication을 위한 Client Password가 된다.
RFC 6749
에서 Authorization Server
가 반드시 구현해야하는 인증방법을 명시하는데, RFC 2617 - HTTP Authentication이 바로 그것이다.
Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbU13
이 외에 request-body
를 이용하는 방법으로도 구현할 수 있다. 이 때 parameter값은 아래와 같다.
client_id
client_secret
이 방법은 권장되지 않으며, 위에서 언급한 RFC 2617
을 구현할 수 없는 Client
에 한정해야한다. 또, 절대로 이 값이 URI
에 노출되어선 안 된다.
다음은 Protocol Endpoints에 대해 정리하도록 하겠다.