🚅

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

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

その後、下記のような 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 認定も取得済みです。

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

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

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

Authlete

Discussion