OktaをSalesforceの認証プロバイダに登録しているSalesforceのアクセストークンが正しく機能するか検証する
はじめに
Oktaを認証プロバイダに設定しているSalesforce組織で、Salesforceが保持しているアクセストークンをOktaのトークン検証用APIで正常に動作するか確認した。
目次
- アクセストークンを検証する全体像
- アクセストークン取得用のApexトリガーを設定する
- 取引先詳細画面でアクセストークンを確認する
- アクセストークンの内容を確認する
- アクセストークンが有効化確認する
詳細
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プロバイダーで発行されたアクセストークンを取得して有効であることを確認できました。






