Python 애플리케이션 및 SDK 검토
솔루션의 이 섹션에서 다음을 수행합니다.
-
Python 웹 애플리케이션의 동작 및 코드 검사
-
Python 웹 애플리케이션이 Oracle Identity Cloud Service로 시작하는 성공한 로그인 시도 및 실패한 로그인 시도와 연관된 진단 데이터를 확인합니다.
Python 응용 프로그램의 동작 검사
Python 웹 응용 프로그램의 동작은 권한 부여 코드 권한 부여 유형으로 정의된 3단계 인증 플로우를 따릅니다.
애플리케이션 및 Oracle Identity Cloud Service가 웹 브라우저를 사용하여 수행하는 요청, 응답 및 재지정을 모두 확인하려면 브라우저에 대해 개발자 모드를 사용으로 설정합니다. 이 솔루션은 Google Chrome을 사용합니다.
- Python 웹 응용 프로그램을 실행합니다.
- Google Chrome 웹 브라우저를 열고
http://localhost:8080
URL에 액세스한 다음 로그인을 누릅니다. - F12을 누르고 네트워크 탭을 선택한 다음 로그 보존 확인란을 선택합니다. 애플리케이션과 Oracle Identity Cloud Service 간의 모든 통신을 보려면 이 체크박스를 선택합니다.
- 로그인 페이지에서 Oracle 빨간색 아이콘을 누릅니다.
응용 프로그램 및 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]
config.json
파일을 열고LogLevel
값을DEBUG
로 바꿉니다.- 파일을 저장하고 Python 서버를 재시작합니다.
진단 데이터 확인
Python 웹 애플리케이션이 Oracle Identity Cloud Service에 사인인하려고 시도하면 성공한 시도와 실패한 시도가 모두 Oracle Identity Cloud Service의 진단 로그 파일에 등록됩니다.
- Oracle Identity Cloud Service 콘솔에 사인인합니다.
- 콘솔에서 탐색 서랍을 확장하고 설정을 누른 다음 진단을 누릅니다.
- 진단 유형으로 작업 뷰를 선택한 다음 저장을 누릅니다.
- Oracle Identity Cloud Service에서 사인아웃합니다.
Oracle Identity Cloud Service는 다음 15분 동안 진단 데이터를 캡처합니다.
- Python 웹 애플리케이션의 로그인 페이지를 표시하려면 이 솔루션의 Run the Python Application 항목에 있는 단계를 완료합니다.
- Oracle 빨간색 아이콘을 누릅니다.
- 사인인 실패를 시도하려면 Oracle Identity Cloud Service 사인인 페이지에서 사용자 이름 또는 비밀번호를 잘못 입력하십시오.
- 성공적으로 사인인하려면 올바른 사용자 이름과 비밀번호를 입력하십시오.
- Python 웹 애플리케이션을 사용하여 Oracle Identity Cloud Service에서 사인아웃합니다.
- Oracle Identity Cloud Service 콘솔에 사인인합니다.
- 콘솔에서 탐색 서랍을 확장하고 보고서를 누른 다음 진단 데이터를 누릅니다.
- 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
파일의 맨 위에 가장 최근 로그가 표시됩니다.