OktaをSalesforceの認証プロバイダに登録しているSalesforceのアクセストークンが正しく機能するか検証する

Stay hungry. Stay foolish. Your time is limited, so don't waste it living someone else's life.

OktaをSalesforceの認証プロバイダに登録しているSalesforceのアクセストークンが正しく機能するか検証する

はじめに

Oktaを認証プロバイダに設定しているSalesforce組織で、Salesforceが保持しているアクセストークンをOktaのトークン検証用APIで正常に動作するか確認した。

目次

  1. アクセストークンを検証する全体像
  2. アクセストークン取得用のApexトリガーを設定する
  3. 取引先詳細画面でアクセストークンを確認する
  4. アクセストークンの内容を確認する
  5. アクセストークンが有効化確認する

詳細

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_class_Auth_AuthToken.htm

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_userinfo.htm

1. アクセストークンを検証する全体像

エンドユーザがOpenIDプロバイダで認証し、クライアントが取得したアクセストークンが、OpenAPIプロバイダーのトークン検証APIで正しく動作するか確認する。

2.アクセストークン取得用のApexトリガーを設定する

下記のApexトリガーのSalesforceのAuth.AuthToken.getAccessTokenで利用するOktaの18桁の認証プロバイダIDを、SOQLを実行して取得する。

SOQL: SELECT Id,DeveloperName FROM AuthProvider

SalesforceのセッションIDとアクセストークンを取得するためのApexトリガーを実装する。

trigger AccountTrigger on Account (before insert, before update) {

    String sessionID = UserInfo.getSessionId();
    String providerName = 'Open ID connect'; // 認証プロバイダの値
    String authProviderId  = '0SO5i000000GoPeGAK';
    String accessToken = Auth.AuthToken.getAccessToken(authProviderId, providerName);
    Map<String,String> accessTokenMap = Auth.AuthToken.getAccessTokenMap(authProviderId, providerName);
    Map<String,String> refreshTokenMap = Auth.AuthToken.refreshAccessToken(authProviderId, providerName, accessToken);
    for(Account a : Trigger.New) {
        a.SessionID__c = sessionID;
        a.AccessToken__c = accessToken;
        a.AccessTokenMap__c =  accessTokenMap.toString();
        a.RefreshTokenMap__c = refreshTokenMap.toString();
    }
    System.debug('>>> SessionID: ' + sessionID);
    System.debug('>>> AccessToken: ' + accessToken);
    System.debug('>>> AccessTokenMap: ' + accessTokenMap);
    System.debug('>>> RefreshAccessTokenMap: ' + refreshTokenMap);
}

3.取引先詳細画面でアクセストークンを確認する

取引先を新規で作成するとアクセストークンが取得できる。

4.アクセストークンの内容を確認する

OktaのアクセストークンはJWT形式なので中身を確認する。
発行者(iss)がOktaになっていることが確認できる。

5.アクセストークンが有効であるか確認する

Oktaのトークン検証用エンドポイントでトークンが有効であるか確認する。
結論有効だった。そのほかに、UsernameやClientIDが取得できたことが確認できた。

さいごに

いかがだったでしょうか。SalesforceでOpenIDプロバイダーで発行されたアクセストークンを取得して有効であることを確認できました。