Oracle Identity Cloud Service로 Java 애플리케이션 개발

인증 플로우를 이해하고 Customer Quotes 애플리케이션이 Java 서블릿을 사용하여 Oracle Identity Cloud Service와의 통합을 구현하는 방법을 알아봅니다.

인증 흐름 이해

다음 프로세스 플로우는 인증 플로우의 단계와 예제 고객 견적 애플리케이션과 Oracle Identity Cloud Service 간의 통신에 대해 설명합니다.

  1. 사용자가 고객 견적 애플리케이션(https://localhost:8181/cquotes)에 접근한 다음 Identity Cloud Service로 로그인을 누릅니다.

  2. 고객 견적 애플리케이션은 다음과 같은 형식으로 승인 코드 요청을 준비합니다.
    • URL: https://example.identity.oraclecloud.com/oauth2/v1/authorize?client_id=clientid&response_type=code&redirect_uri=https://localhost:8181/cquotes/return&scope=openid

    • 매개변수:
      • client_id: 고객이 Oracle Identity Cloud Service에 등록된 고유한 애플리케이션 ID를 인용합니다.

      • response_type: Oracle Identity Cloud Service에서 예상된 응답입니다. 이 단계에서는 권한 부여 코드입니다.

      • redirect_uri: 사용자가 Oracle Identity Cloud Service에서 인증 및 권한 부여를 완료한 후 권한 부여 코드가 전송되는 URL입니다.

      • scope: 고객 견적 애플리케이션에서 사용자를 대신하여 액세스하고 처리할 수 있는 데이터를 제어합니다. OpenID Connect가 사용되므로 범위는 openid입니다.

  3. Customer Quotes 애플리케이션은 2단계에서 생성된 Oracle Identity Cloud Service 인증 코드 URL로 사용자를 재지정합니다.

  4. Oracle Identity Cloud Service는 Customer Quotes 애플리케이션(client_id로 식별됨)으로부터 인증 코드 요청을 받습니다.

  5. Oracle Identity Cloud Service는 사용자가 이미 인증되었는지 여부를 확인합니다. 이 경우 Oracle Identity Cloud Service는 사인인 프로세스를 건너뜁니다. 그렇지 않은 경우 Oracle Identity Cloud Service에서 사인인 프로세스를 시작하고 사인인 페이지를 표시합니다.

  6. 사용자가 검증을 위해 Oracle Identity Cloud Service에 사인인 인증서를 제출합니다. Oracle Identity Cloud Service 사인인 프로세스는 사인인 인증서가 성공적으로 검증될 때까지 비밀번호 정책을 적용합니다.

  7. 사인인 프로세스가 성공하면 Oracle Identity Cloud Service에서 다음 재지정 URL을 사용하여 사용자를 고객 견적 애플리케이션으로 다시 재지정합니다.
    • URL:

      • https://localhost:8181/cquotes/return?code=code

    • 매개변수:

      • code: Oracle Identity Cloud Service에서 생성된 권한 부여 코드입니다.

  8. 고객 견적 애플리케이션은 요청에서 승인 코드를 추출합니다.

  9. Customer Quotes 애플리케이션은 Oracle Identity Cloud Service와 직접 통신하여 다음 URL 및 헤더를 사용하여 사용자 액세스 토큰에 대한 권한 부여 코드를 교환합니다.
    • URL: https://example.identity.oraclecloud.com/oauth2/v1/token?grant_type=authorization_code&code=code

    • 요청 헤더:
      • Authorization=Basic(client_id:client_secret, 64비트 인코딩)

      • Accept=*/*

    • 매개변수:
      • grant_type: authorization_code를 사용하여 Oracle Identity Cloud Service에서 액세스 토큰을 요청하므로 권한 부여 유형은 authorization_code여야 합니다.

      • code: 사용자가 성공적으로 사인인한 후 Oracle Identity Cloud Service에서 수신된 권한 부여 코드입니다.

    • 머리글 목록:
      • 권한 부여: client_id:client_secret 형식의 신뢰할 수 있는 응용 프로그램 client_idclient_secret(64비트 인코딩)입니다.

      • 수락: 고객 견적 애플리케이션에서 예상하는 응답 유형

        .
  10. Oracle Identity Cloud Service는 요청을 검증하고 다음 JSON 웹 토큰(JWT)을 고객 견적 애플리케이션에 반환합니다.
    • JWT 콘텐츠:
      • access_token: 사용자에 대한 정보를 포함합니다. 고객 견적 애플리케이션은 사용자 대신 Oracle Identity Cloud Service API를 호출할 때 이 토큰을 사용할 수 있습니다. access_token 콘텐츠는 인증 프로세스 중 요청된 범위에 따라 다릅니다.

      • id_token: OpenID Connect의 기본 토큰이며 scope=openid를 사용하여 끝점에 권한을 부여하는 데 사용됩니다. id_token에는 사용자에 대한 식별 정보(예: 이름 및 전자메일)가 포함되어 있습니다. 이 정보는 클라이언트 응용 프로그램에서 컨텐트 확인 및 표시를 비롯한 여러 용도로 사용할 수 있습니다. 적합(OpenID Connect 제공자 서명을 기반으로 클라이언트에서 확인) 및 활성 id_token는 사용자에게 인증되었으며 적합한 토큰이 있음을 애플리케이션에 알립니다.

  11. 고객 견적 애플리케이션은 JWT 토큰(id_token)을 처리한 다음 Oracle Identity Cloud Service에서 반환되는 사용자 정보(예: 이름 및 전자메일)를 추출합니다.

  12. Customer Quotes 애플리케이션은 이름 및 e-메일과 같은 사용자 정보를 포함하는 홈 페이지를 표시합니다.

Java 응용 프로그램 코드 이해

예제 Customer Quotes 애플리케이션은 서블릿 기술을 사용합니다.

응용 프로그램은 다음 기본 서블릿으로 구성됩니다.
  • com.example.servlet.AccessResourceServlet: 사용자를 Oracle Identity Cloud Service로 재지정하여 권한 부여 코드를 요청하는 방식으로 인증 플로우를 시작합니다.

  • com.example.servlet.ReturnServlet: Oracle Identity Cloud Service에서 재지정 URL을 처리하고, 권한 부여 코드를 수신하고, com.example.utils.OICOAuthClient 클래스를 사용하여 ID 토큰 및 액세스 토큰에 대한 권한 부여 코드를 교환합니다.

  • com.example.servlet.LogoutServlet: 애플리케이션의 사용자 세션을 종료하지만 Oracle Identity Cloud Service에서 사용자를 사인아웃하지 않습니다.

서블릿은 다음 유틸리티 클래스를 사용합니다.
  • com.example.utils.OICOAuthClient: Oracle Identity Cloud Service REST API에 대한 URL 엔드포인트를 구성하고, 요청을 처리하고, Oracle Identity Cloud Service 응답을 구문분석하고, 애플리케이션의 HTTP 세션에 사용자 정보를 추가합니다.

  • com.example.utils.HttpUtil: Oracle Identity Cloud Service REST API 끝점과의 HTTP 통신을 처리합니다. Customer Quotes 애플리케이션에서 Oracle Identity Cloud Service로의 모든 커뮤니케이션은 java.net.HttpURLConnection 클래스를 통해 이루어집니다.