LoginSignup
0
0

Spring + Authlete で OAuth / API サーバーを超速で構築する

Last updated at Posted at 2024-04-22

概要

Spring Boot + Authlete を利用して、OAuth 2.0 / API サーバーを超速で構築する方法を解説します。

アーキテクチャ

手順

1. Authlete にサインアップ

サインアップページから、Authlete にサインアップします。

サインアップが成功すると、サービスオーナーコンソールに自動ログインされます。

2. サービス作成&設定

サービスオーナーコンソールにログイン後、「サービス作成」タブをクリックします。


サービス作成画面上の「サービス名」を適当に入力後、作成ボタンをクリックしてサービスを作成します。

その後、サービス詳細画面にて表示される API キーAPI シークレットの値をメモしておきます。

3. クライアント作成&設定

下記 URL より、クライアント管理コンソールにアクセスします。

https://cd.authlete.com/{サービス API キーの値}

(ログイン ID, パスワード) = (サービス API キー, サービス API シークレット) として、クライアント管理コンソールにログインします。

クライアント作成画面上の「クライアント名」を適当に入力後、作成ボタンをクリックしてクライアントアプリを作成します。

その後、サービス詳細画面にて表示される クライアント ID の値をメモしておきます。

4. 認可 (OAuth) サーバーのセットアップ

下記コマンドで、ソースコードをダウンロードします。

$ git clone https://github.com/authlete/spring-oauth-server.git

authlete.properties 内の項目を以下のように編集します。

service.api_key = (サービス API キー)
service.api_secret = (サービス API シークレット)

下記コマンドで認可 (OAuth) サーバーを起動します。  (ポート 8080 で起動します。)

$ docker-compose up

5. API サーバーのセットアップ

下記コマンドで、ソースコードをダウンロードします。

$ git clone https://github.com/authlete/spring-resource-server.git

authlete.properties 内の項目を以下のように編集します。

service.api_key = (サービス API キー)
service.api_secret = (サービス API シークレット)

下記コマンドで認可 API サーバーを起動します。  (ポート 8081 で起動します。)

$ docker-compose up

6. 動作確認

6.1. アクセストークンの発行

では、認可コードフロー (RFC6749) を用いて、実際に認可サーバーからアクセストークンが発行されることを確認しましょう。

6.1.1. 認可リクエスト

最初に、以下の URL (認可エンドポイント) にブラウザでアクセスします。

http://localhost:8080/api/authorization?client_id={クライアント ID}&response_type=code

すると以下のような認可画面が表示されます。

下記のダミーユーザー情報を入力して Authorize ボタンを押します。

  • User ID = john
  • Password = john

ダミーユーザー情報は、/src/main/java/com/authlete/spring/server/db/UserDao.java にて管理されています。必要に応じてカスタマイズしてください。

その後、下記のような URL リダイレクトされるので、クエリパラメーター code の値 (認可コード) をメモしておきます。

https://api.authlete.com/api/mock/redirection/{サービス API キー}?code=xxxxx...

6.1.2. トークンリクエスト

続いて、上記で取得した認可コードを用いて、トークンエンドポイントにリクエストを送信します。以下はトークンリクエストの例です。

$ curl -v -X POST \
-d 'code={認可コードの値}' \
-d 'client_id={クライアント ID}' \
-d 'grant_type=authorization_code' \
http://localhost:8080/api/token

すると、以下のような成功レスポンスが得られます。

{
  "access_token": "xxxxx",
  "refresh_token": "xxxxx",
  "scope": null,
  "token_type": "Bearer",
  "expires_in": 86400
}

6.2. API アクセス

それでは、6.1. で取得したアクセストークンを用いて API サーバー上の「API Country エンドポイント (/api/country/{country-code})」にアクセスしてみましょう。

$ curl -v -H "Authorization: Bearer {access-token}" \
http://localhost:8081/api/country/JP

成功すると, 以下のような成功レスポンスが得られます。

{
  "name": "Japan",
  "alpha2": "JP",
  "alpha3": "JPN",
  "numeric": 392,
  "currency": "JPY"
}

また, アクセストークンを付与せずにアクセスすると

$ curl -v http://localhost:8081/api/country/JP

以下のように、適切なエラーが返却されます。

< HTTP/1.1 400 
< Cache-Control: no-store, no-transform
< Pragma: no-cache
< WWW-Authenticate: Bearer error="invalid_token",error_description="An access token is missing."
< Content-Length: 0
...

More Info

更に詳細を知りたい、カスタマイズしたい方は、下記資料をご参照ください。

最後に

authlete-logo-horizontal_wclear.png

最後に、私が共同創業した Authlete, Inc. は OAuth サーバー/OpenID Connect プロバイダーを構築するための Web API 提供しております。世界中の専門家をメンバーに抱え、FAPI 等の OpenID 認定も取得済みです。

ご興味がある場合、こちらのウェブフォームまたは以下のメールアドレスよりお気軽にお問い合わせください。

また、下記のチェックも是非よろしくお願い致します。

最後までご拝読頂きありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0