PythonアプリケーションおよびSDKの確認

解決策のこのセクションでは、次の操作を行います。

  • Python Webアプリケーションの動作とコードの確認

  • Python WebアプリケーションがOracle Identity Cloud Serviceに対して開始するログイン試行の成功および失敗に関連する診断データをチェックします

Pythonアプリケーションの動作の確認

Python Webアプリケーションの動作は、認可コード付与タイプによって定義された3-legged認証フローに従います。

アプリケーションおよびOracle Identity Cloud ServiceがWebブラウザを使用して実行するすべてのリクエスト、レスポンスおよびリダイレクトを確認するには、ブラウザの開発者モードを有効にします。このソリューションはGoogle Chromeを使用します。

  1. Python Webアプリケーションを実行します。
  2. Google Chrome Webブラウザを開き、http://localhost:8080 URLにアクセスし、「ログイン」をクリックします。
  3. F12を押し、「ネットワーク」タブを選択し、「ログの保持」チェック・ボックスを選択します。このチェック・ボックスを選択すると、アプリケーションとOracle Identity Cloud Service間のすべての通信が表示されます。
  4. 「ログイン」ページで、「Oracle」赤のアイコンをクリックします。

ブラウザの開発者ログには、次のイベントフローが表示されます。

  1. ユーザーが/auth/oracleリソースをリクエストすると、WebブラウザはPython Webアプリケーションからリダイレクト・レスポンスを受信します。
    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は、WebブラウザをPython Webアプリケーションのコールバック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によって、Webブラウザがホーム・ページにリダイレクトされ、ユーザー・アクセス・トークンがセッション属性として設定されます。

アプリケーションおよびSDKログの確認

アプリケーションは、情報をコマンドライン・ウィンドウに記録します。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 WebアプリケーションがOracle Identity Cloud Serviceにサインインしようとすると、成功した試行と失敗した試行の両方がOracle Identity Cloud Serviceの診断ログ・ファイルに登録されます。

  1. Oracle Identity Cloud Serviceコンソールにサインインします。
  2. コンソールで、ナビゲーション・ドロワーを開き、「設定」「診断」の順にクリックします。
  3. 診断タイプとして「アクティビティ・ビュー」を選択し、「保存」をクリックします。
  4. Sign out of Oracle Identity Cloud Service.

Oracle Identity Cloud Serviceは、次の15分間の診断データを取得します。

  1. このソリューションの「Pythonアプリケーションの実行」トピックのステップを完了して、Python Webアプリケーションの「ログイン」ページを表示します。
  2. 「Oracle」赤のアイコンをクリックします。
  3. サインイン試行に失敗するには、Oracle Identity Cloud Serviceの「サインイン」ページで間違ったユーザー名またはパスワードを入力します。
  4. 正常にサインインするには、正しいユーザー名とパスワードを入力します。
  5. Python Webアプリケーションを使用して、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

最新のログがファイルの先頭に表示されます。