質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

0回答

631閲覧

Java(SpringBoot)アプリにおいて、アクセス経路に従ってOAuth2認証先(エンドポイント)を切り替えたい

junikiti

総合スコア0

Salesforce

Salesforceは、クラウド型の顧客関係管理(CRM)、営業支援(SFA)などのサービスを提供している企業。米カリフォルニア州に本社があり、日本法人は株式会社セールスフォース・ドットコムです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2023/01/26 12:12

編集2023/01/26 12:15

■アプリケーション構成
①Salesforce
↓ ※リンクで呼び出し
②Webアプリ(SpringBoot)

■背景
※Salesforce=①、Webアプリ=②

ユーザーはまず①にログインした後、画面内リンクを押下することで②を呼び出します。
②の認証はOAuth2となっており、処理の中でSalesforceAPIを呼び出しています。
※①アクセス時に認証済みとなっているため、基本的に②アクセス時は認証済みとされログイン画面には遷移しない(SSO)

元々、①の入り口は1つ(一般ユーザーが利用する一般的なSalesforceの画面 : ①-aとする)だったため、
②は下記に記載した実装内容で問題なく動作(認証⇨API実行)していたのですが、
①の入り口がもう一つ(ログイン画面も上記とは異なるExperience Cloudサイト:①-bとする)増えました。
その結果、①-aから②にアクセスした時は認証済みとして②の画面が表示されるが、①-bから②にアクセスした場合、未認証としてログイン画面に遷移するようになりました。
(ただし、②に設定しているOAuth認証情報等は①-a用のため、遷移先のログイン画面は①-aのものが表示される)

■実現したいこと
②での認証において、①-a、①-bどちらからアクセスされたか判別し、OAuth認証エンドポイント等
を切り替えたい(=どちらから来てもSSOしたい)
※どちらからのアクセスかは②呼び出し時のパラメータで判別可能

■Webアプリ内の認証処理
・OAuth2 Autoconfigを利用

■現状の実装
[pom.xml]

pom.xml

1<dependency> 2 <groupId>org.springframework.security.oauth.boot</groupId> 3 <artifactId>spring-security-oauth2-autoconfigure</artifactId> 4 <version>2.1.4.RELEASE</version> 5</dependency>

[設定ファイル]

applition.properties

1security.oauth2.client.client-authentication-scheme = form 2security.oauth2.client.authentication-scheme = header 3security.oauth2.client.grant-type = autorization_code 4security.oauth2.client.access-token-uri = https://login.salesforce.com/services/oauth2/token 5security.oauth2.client.user-authorization-uri = https://login.salesforce.com/services/oauth2/authorize 6security.oauth2.resource.user-info-uri = https://login.salesforce.com/services/oauth2/userinfo

[②のエントリポイントでのBean定義]

Java

1@Bean 2public OAuth2RestTemplate oauth2RestTemplate(OAuth2ClientContext oauth2ClientContext, 3 OAuth2ProtectedResourceDetails details) { 4 return new OAuth2RestTemplate(details, oauth2ClientContext); 5}

■現状調査してわかっていること
・サーバー起動時に上記Bean処理(oauth2RestTemplateのインスタンス作成)が実施されており、
①からのアクセス時には実行されていない。
・上記oauth2RestTemplateインスタンスには、OAuth2認証に必要な情報がセットされている
・上記エントリポイントに記載したBean定義を消すとサーバーは起動しない(oauth2-autoconfig導入時は必須と認識)
・application.propertiesのOAuth認証情報を、①-b用の情報に書き換えた上で、①-bからアクセスした場合はSSOに成功するが、①-aからアクセスした場合はログイン画面(①-b用)が表示される。

■質問
・今回やりたいことはアクセス元から渡されるパラメータを元にOAuth認証に必要な各種エンドポイントを切り替え、アクセス元が単独だった時と同様、認証通過(SSO)し、API呼び出しされることですが、
今回の構成で実現は可能でしょうか?
※OAuth2RestTemplateはサーバー起動時に生成されているため、外部からのアクセス時に切り替えることができないのでは??

・今回の方法を実現できるとしたら、"filterChain"を作成、Bean登録し適切な処理を記載することだと
考えていますがいかがでしょうか。
このように実装すればいけるというのがあればご教示いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問