OpenID Connect를 위한 권한 부여 엔드포인트 호출

OpenID Connect에서 권한 부여 엔드포인트는 사용자의 인증 및 권한 부여를 처리합니다.

시작하기 전에

예를 들어, 브라우저 내 클라이언트 애플리케이션 또는 Javascript 등의 스크립팅 언어로 구현된 클라이언트 애플리케이션에서 권한 부여 엔드포인트를 시작하는 경우에는 OpenID Connect 클라이언트로서 Liberty 서버를 구성할 필요가 없습니다.

이 태스크 정보

권한 부여 엔드포인트는 OAuth 2.0OpenID Connect 1.0 스펙 둘 다에 의해 정의된 매개변수를 포함하는 인증 요청을 승인합니다.

권한 부여 코드 플로우에서 권한 부여 엔드포인트는 인증 및 권한 부여에 사용되며 클라이언트에게 권한 부여를 리턴합니다. 이 권한 부여는 그런 다음 ID 토큰, 액세스 토큰 및 새로 고치기 토큰을 교환할 때 클라이언트의 요청 내에서 토큰 엔드포인트로 전달될 수 있습니다. 암시 플로우에서, 권한 부여 엔드포인트는 여전히 인증 및 권한 부여를 수행하지만 또한 응답에서 ID 토큰 및 액세스 토큰을 클라이언트에 직접 리턴합니다. 토큰 엔드포인트에서는 상호작용이 전혀 수행되지 않습니다.

OpenID Connect가 사용되는 Liberty 서버는 다음 URL에서 OpenID Connect 권한 부여 엔드포인트에 액세스할 수 있습니다.

 https://server.example.com:443/oidc/endpoint/<provider_name>/authorize
문제점 예방: 아웃바운드 프록시를 사용하는 경우, OpenID Connect RP가 자동으로 호스트되는 프록시를 통해 요청을 라우팅하는 방법을 제공하지 않습니다.

OP(OpenID Connect Provider)에 액세스하기 위해 프록시를 사용해야 하는 경우, 임의의 OP 관련 URL 특성에 대해 입력하는 값이 외부 OP 호스트 및 포트가 아니라 프록시 호스트 및 포트를 포함해야 합니다.

대부분의 경우, OP 호스트 및 포트를 프록시 호스트 및 포트로 대체할 수 있습니다. 입력하는 URL이 RP 및 클라이언트(브라우저 또는 애플리케이션) 둘 다에 표시되어야 합니다. 사용할 올바른 URL을 판별하는 방법에 대한 안내가 필요하면 프록시 관리자에게 문의하십시오.

이 예제에서 클라이언트는 SSL 포트가 443으로 설정될 것으로 예상합니다.

프로시저

  1. 다음과 같은 필수 및 권장 매개변수를 포함하는 HTTP GET 또는 POST 요청을 준비하십시오.
    • scope: (필수) OpenID Connect 요청은 openid 범위 값을 포함해야 합니다. 다른 범위도 존재할 수 있습니다.
    • response_type: (필수) 사용할 권한 부여 처리 플로우를 결정합니다. 권한 부여 코드 플로우를 사용하는 경우, 이 값은 code입니다. 암시 플로우를 사용하는 경우, 이 값은 id_token token 또는 id_token입니다. 이 값이 id_token인 경우에는 액세스 토큰이 리턴되지 않습니다.
    • client_id: (필수) OpenID Connect Provider에서 유효한 클라이언트 ID입니다.
    • redirect_uri: (필수) 응답을 전송할 방향 지정 URI입니다. 이 값은 OP에 있는 등록된 클라이언트의 방향 지정 URI 값 중 하나와 정확히 일치해야 합니다.
    • state: (권장) 요청과 콜백 사이의 상태를 유지하기 위해 오파크 값이 사용됩니다.
    • nonce: (암시 플로우의 경우 필수) 클라이언트 세션을 ID 토큰과 연관시키고 반복 공격을 완화하는 데 사용되는 문자열 값입니다.

    요청에 더 많은 매개변수를 포함시킬 수 있습니다. 지원되는 다른 매개변수에 대한 설명은 OpenID Connect Core 1.0 스펙을 참조하십시오.

    id_token response_type만 지원하지는 않습니다. 암시 플로우를 사용하는 경우 항상 id_token token을 사용해야 하며 액세스 토큰이 리턴됩니다.

  2. GET 또는 POST 요청을 권한 부여 엔드포인트 URL로 보내십시오.

결과

이러한 단계를 완료한 후에는 권한 부여 엔드포인트로 전송되는 유효한 HTTP 요청이 있습니다. 권한 부여 엔드포인트는 예제 절에서 설명하는 방식으로 응답을 리턴합니다.

OpenID Connect Provider는 클라이언트로부터 요청을 수신하면 사용자를 인증하고 권한 부여하려고 시도합니다.

권한 부여 코드 플로우에서, 인증 및 권한 부여가 성공하면 OpenID Connect Provider는 권한 부여 코드를 발행하여 클라이언트에게 보내는 OAuth 2.0 권한 부여 응답에 매개변수로 포함시킵니다. 초기 요청에 state가 포함된 경우, 권한 부여 응답에는 초기 요청에 포함된 정확한 state 값도 포함됩니다. application/x-www-form-urlencoded 형식을 사용하여 codestate 매개변수가 권한 부여 요청에서 지정된 redirect_uri 값에 조회 매개변수로 추가됩니다.

암시 플로우에서 인증 및 권한 부여가 성공하면 권한 부여 엔드포인트에서 다음 매개변수가 리턴됩니다.

  • access_token: 액세스 토큰. 초기 요청의 [response_type] 값이 [id_token]이 아닌 경우 리턴됩니다.
  • token_type: OAuth 2.0 토큰 유형. OpenID Connect의 경우 이 값은 Bearer입니다.
  • id_token: ID 토큰.
  • state: 권한 부여 요청에 포함된 경우 필수입니다.
  • expires_in: (선택사항) 응답이 생성된 후 액세스 토큰의 만기 시간(초)입니다.

이러한 매개변수는 권한 부여 코드 플로우에서처럼 조회 매개변수로 추가되는 것이 아니라 권한 부여 요청에서 지정된 redirect_uri 값의 단편 컴포넌트에 추가됩니다.

다음 예제는 권한 부여 및 암시 코드 플로우의 양식을 보여줍니다.

권한 부여 코드 플로우에 대한 예제 요청은 다음과 같습니다.

 GET /authorize?
     response_type=code
     &scope=openid profile email 		
     &client_id=client01 		
     &state=af0ifjsldkj 		
     &redirect_uri=https://server.example.com:8020/oidcclient/redirect/client01 HTTP/1.1 	

암시 플로우에 대한 예제 요청은 다음과 같습니다.

 GET /authorize?
     response_type=id_token token
     &scope=openid profile 		
     &client_id=client01 		
     &state=af0ifjsldkj 		
     &redirect_uri=https://server.example.com:8020/oidcclient/redirect/client01 		
     &nonce=n-0S6_WzA2Mj HTTP/1.1 	

권한 부여 코드 플로우에서 권한 부여 엔드포인트로부터의 예제 응답은 다음과 같습니다.

 HTTP/1.1 302 Found
 Location: https://server.example.com:8020/oidcclient/redirect/client01
     code=SplxlOBeZQQYbYS6WxSbIA
     &state=af0ifjsldkj

암시 플로우에서 권한 부여 엔드포인트로부터의 예제 응답은 다음과 같습니다.

 HTTP/1.1 302 Found
 Location: https://server.example.com:8020/oidcclient/redirect/client01
     access_token=SlAV32hkKG
     &token_type=Bearer 		
     &id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso 		
     &expires_in=3600 		
     &state=af0ifjsldkj

주제의 유형을 표시하는 아이콘 태스크 주제

파일 이름: twlp_oidc_auth_endpoint.html