Python 애플리케이션 및 SDK 검토

솔루션의 이 섹션에서 다음을 수행합니다.

  • Python 웹 애플리케이션의 동작 및 코드 검사

  • Python 웹 애플리케이션이 Oracle Identity Cloud Service로 시작하는 성공한 로그인 시도 및 실패한 로그인 시도와 연관된 진단 데이터를 확인합니다.

Python 응용 프로그램의 동작 검사

Python 웹 응용 프로그램의 동작은 권한 부여 코드 권한 부여 유형으로 정의된 3단계 인증 플로우를 따릅니다.

애플리케이션 및 Oracle Identity Cloud Service가 웹 브라우저를 사용하여 수행하는 요청, 응답 및 재지정을 모두 확인하려면 브라우저에 대해 개발자 모드를 사용으로 설정합니다. 이 솔루션은 Google Chrome을 사용합니다.

  1. Python 웹 응용 프로그램을 실행합니다.
  2. Google Chrome 웹 브라우저를 열고 http://localhost:8080 URL에 액세스한 다음 로그인을 누릅니다.
  3. F12을 누르고 네트워크 탭을 선택한 다음 로그 보존 확인란을 선택합니다. 애플리케이션과 Oracle Identity Cloud Service 간의 모든 통신을 보려면 이 체크박스를 선택합니다.
  4. 로그인 페이지에서 Oracle 빨간색 아이콘을 누릅니다.

브라우저의 개발자 로그에 다음과 같은 이벤트 흐름이 표시되어야 합니다.

  1. 사용자가 /auth/oracle 리소스를 요청하면 웹 브라우저가 Python 웹 응용 프로그램에서 재지정 응답을 수신합니다.
    Request URL: http://localhost:8000/auth/
    Request Method: GET
    Status Code: 302 Found
    
    Response Headers
    Location: https://idcs-1234.identity.domain.com/oauth2/v1/authorize?client_id=123456789abcdefghij&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fcallback&response_type=code&scope=urn:opc:idm:t.user.me+openid&state=1234
  2. Oracle Identity Cloud Service는 권한 부여 코드 요청을 수신하고 사인인 페이지를 제공합니다.
    Request URL: https://idcs-1234.identity.domain.com/oauth2/v1/authorize?client_id=123456789abcdefghij&redirect_uri=http%3A%2F%2Flocalhost%3A8000%2Fcallback&response_type=code&scope=urn:opc:idm:t.user.me+openid&state=1234
    Request Method: GET
    Status Code: 303 See Other
     
    Response Headers
    Location:
    https://idcs-1234.identity.domain.com/ui/v1/signin
    Set-cookie: ORA_OCIS_REQ_1=[value has been omitted for readability]
  3. 사용자가 Oracle Identity Cloud Service에 사인인합니다. Oracle Identity Cloud Service는 웹 브라우저를 Python 웹 애플리케이션의 콜백 URL로 리디렉션합니다.
    Request URL:
    http://localhost:8000/callback/&code=[value has been omitted for readability]&state=1234
    Request Method: GET
    Status Code: 200 OK
     
    Response Headers
    Set-Cookie: sessionid=[value has been omitted for readability]

    이 예에서 콜백 URL은 사용자 액세스 토큰이 세션 속성으로 설정된 웹 브라우저를 Home 페이지로 재지정합니다.

응용 프로그램 및 SDK 로그 검사

응용 프로그램이 명령행 window에 정보를 기록합니다. SDK 로그를 사용으로 설정할 수도 있습니다.

기본적으로 샘플 응용 프로그램은 명령줄 창에 인증 플로우 정보를 기록합니다.
Starting development server at http://127.0.0.1:8000/
----------------------------------------
[21/Dec/2018 16:00:42] "GET /login/ HTTP/1.1" 200 2772
...
----------------- def auth(request) ---------------
config.json file = {'logoutSufix': '/oauth2/v1/userlogout', 'ClientSecret': 'abcde-12345-zyxvu-98765-qwerty', 'AudienceServiceUrl': 'https://idcs-abcd1234.identity.domain.com', 'BaseUrl': 'https://idcs-abcd1234.identity.domain.com', 'ClientId': '123456789abcdefghij, 'ConsoleLog': 'True', 'LogLevel': 'INFO', 'scope': 'urn:opc:idm:t.user.me openid', 'redirectURL': 'http://localhost:8000/callback', 'TokenIssuer': 'https://identity.domain.com/'}
[21/Dec/2018 16:00:48] "GET /auth/ HTTP/1.1" 302 0
[21/Dec/2018 16:01:08] "GET /callback?code=[value has been omitted for readability]&state=1234 HTTP/1.1" 301 0
----------------- def callback(request) ------------------
access_token = [value has been omitted for readability]

아래 단계에 따라 Oracle Identity Cloud Service의 Python SDK 로그를 켜고 개발 중 발견된 문제를 검사합니다.
  1. config.json 파일을 열고 LogLevel 값을 DEBUG로 바꿉니다.
  2. 파일을 저장하고 Python 서버를 재시작합니다.

진단 데이터 확인

Python 웹 애플리케이션이 Oracle Identity Cloud Service에 사인인하려고 시도하면 성공한 시도와 실패한 시도가 모두 Oracle Identity Cloud Service의 진단 로그 파일에 등록됩니다.

  1. Oracle Identity Cloud Service 콘솔에 사인인합니다.
  2. 콘솔에서 탐색 서랍을 확장하고 설정을 누른 다음 진단을 누릅니다.
  3. 진단 유형으로 작업 뷰를 선택한 다음 저장을 누릅니다.
  4. Oracle Identity Cloud Service에서 사인아웃합니다.

Oracle Identity Cloud Service는 다음 15분 동안 진단 데이터를 캡처합니다.

  1. Python 웹 애플리케이션의 로그인 페이지를 표시하려면 이 솔루션의 Run the Python Application 항목에 있는 단계를 완료합니다.
  2. Oracle 빨간색 아이콘을 누릅니다.
  3. 사인인 실패를 시도하려면 Oracle Identity Cloud Service 사인인 페이지에서 사용자 이름 또는 비밀번호를 잘못 입력하십시오.
  4. 성공적으로 사인인하려면 올바른 사용자 이름과 비밀번호를 입력하십시오.
  5. Python 웹 애플리케이션을 사용하여 Oracle Identity Cloud Service에서 사인아웃합니다.
  6. Oracle Identity Cloud Service 콘솔에 사인인합니다.
  7. 콘솔에서 탐색 서랍을 확장하고 보고서를 누른 다음 진단 데이터를 누릅니다.
  8. 15분 시간범위, 작업 뷰 로그 유형, CSV 보고서 형식을 선택한 다음 보고서 다운로드를 누릅니다.

진단 로그 파일에는 Oracle Identity Cloud Service에 대한 사인인 시도에 대한 다음과 유사한 정보가 포함되어 있습니다.

Message: ID Token will be signed with User Tenant:idcs-abcd1234 Resource Tenant:idcs-abcd1234, clientId=123456789abcdefghij
Component: OAuth
Timestamp: [Date]
Actor ID: your.email@domain.com
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: {"request":{"tenant":"idcs-abcd1234","grant types":"authorization_code","scopes":["urn:opc:idm:t.user.me"]},"user":{"id":"111111","name":"your.email@domain.com","tenant":"idcs-abcd1234","auth-type":"PASSWORD"},"client":{"id":"123456789abcdefghij","name":"Sample App","tenant":"idcs-abcd1234","auth-type":"PASSWORD"},"environment":{"isCSR":"false","onBehalfOfUser":"false"},"response":{"result":"ALLOWED","scopes":["urn:opc:idm:t.user.me"],"custom-claims":{"clientAppRoles":["Authenticated Client","Me"],"userAppRoles":["Authenticated","Global Viewer","Identity Domain Administrator"],"user_isAdmin":"true"}}}
Component: Authorization/getAllowedScopes
Timestamp: [Date]
Actor ID: your.email@domain.com
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: {"Message":"SSO SignOn Policy evaluation result for user : 11111  is : effect:ALLOW,authenticationFactor:IDP,allowUserToSkip2FAEnrolment:false,2FAFrequency:SESSION,reAuthenticate:false,trustedDevice2FAFrequency:
Component:
Timestamp:
Actor ID:
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: [PolicyEngineUtil.evaluatePolicy] Evaluating Default Sign-On Policy
Component: PolicyEngine
Timestamp: [Date]
Actor ID: uiSignin
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: [PolicyEngineUtil.evaluateRule] Evaluating MFA rule
Component: PolicyEngine
Timestamp: [Date]
Actor ID: uiSignin
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: [PolicyEngineUtil.evaluatePolicy] Evaluating Default Authentication Target App Policy
Component: PolicyEngine
Timestamp: [Date]
Actor ID: idcssso
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: {"password":"********","authFactor":"USERNAME_PASSWORD","device":"{\"currentTime\":\"[date]",\"screenWidth\":1920,\"screenHeight\":1080,\"screenColorDepth\":24,\"screenPixelDepth\":24,\"windowPixelRatio\":1,\"language\":\"en\",\"userAgent\":\"Mozilla\/5.0 (Windows NT 10.0
Component:
Timestamp:
Actor ID:
---------------------------------------------------------------
...
---------------------------------------------------------------
Message: {"Message":"No session found so need to collect credentials","Redirecting to Login URL: ":https://idcs-abcd1234.identity.oraclecloud.com/ui/v1/signin}
Component: SSO
Timestamp: [Date]
Actor ID: Unauthenticated
---------------------------------------------------------------
...
---------------------------------------------------------------
 
Message: [PolicyEngineUtil.evaluatePolicy] Evaluating Default Identity Provider Policy
Component: PolicyEngine
Timestamp: [Date]
Actor ID: Unauthenticated
---------------------------------------------------------------
Message: Authorization Request, received parameters: scope[urn:opc:idm:t.user.me openid] response_type[code] state[1234] redirect_uri[http://localhost:8000/callback] client_id[123456789abcdefghij]
Component: OAuth
Timestamp: [Date]
Actor ID: Unauthenticated

파일의 맨 위에 가장 최근 로그가 표시됩니다.