Oauth 인증방법 중 grant-types 번역 내용입니다.
grant-type : 애플리케이션이 access token 얻는 방식
OAuth는 사용자에게 애플리케이션으로의 제한된 접근시킬 수 있다.
애플리케이션은 처음에 OAuth로 요청할 허락이 필요하기 때문에, 사용자를 브라우저로 보낸다.
authorization flow를 시작하기 위해서, 애플리케이션은 URL을 구성하고, URL의 브라우저를 보여준다.
https://authorization-server.com/auth
?response_type=code
&client_id=29352915982374239857
&redirect_uri=https%3A%2F%2Fexample-app.com%2Fcallback
&scope=create+delete
&state=xcoiv98y2kd22vusuye3kch
response_type : 애플리케이션이 authorization code flow를 초기화하는 authorization server
client_id : 애플리케이션을 위한 공개된 식별자 (개발자가 처음 애플리케이션을 등록할 때 얻은)
redirect_uri : 요청을 승인한 이후 user를 돌려보낼 authorization server
scope : 애플리케이션이 요청하는 허용을 암시하는 1개 이상의 구분되는 문자열
state : 애플리케이션이 요청을 포함하여 만든 무작위 문자열로, user가 app 에 권한을 부여한 후 동일한 값이 반환되는 지 확인
user가 요청을 승인하면,
authorization server 는 브라우저를 redirect_uri(code, state가 추가된)로 돌려보낸다.
https://example-app.com/redirect
?code=g0ZGZmNjVmOWIjNTk2NTk4ZTYyZGI3
&state=xcoiv98y2kd22vusuye3kch
인증토큰 ➜ 접근 토큰
애플리케이션이 인증코드를 가진 상태로 접근 토큰을 얻는데 사용한다.
애플리케이션이 다음의 파라미터들과 함께 POST 요청한다.
access token 생성후 반환되는 응답
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk",
"scope":"create delete"
}
모마일 앱 등클라이언트 비밀을 저장할 수 없다면 PKCE extension을 사용
뒷단에서 애플리켕션과 OAuth 서버를 통해서 액세스 토큰이 보내지기 때문에, 코드 교환 과정은 공격자가 액세스 토큰을 가로채지 못함을 보장한다.
reference