OAuth 2.0 と OpenID Connect をサポートする認可サーバーの Java による実装です。
この実装は JAX-RS 2.0 API と authlete-java-jaxrs ライブラリを用いて書かれています。 JAX-RS は The Java API for RESTful Web Services です。 JAX-RS 2.0 API は JSR 339 で標準化され、Java EE 7 に含まれています。 一方、authlete-java-jaxrs は、認可サーバーとリソースサーバーを実装するためのユーティリティークラス群を提供するオープンソースライブラリです。 authlete-java-jaxrs は authlete-java-common ライブラリを使用しており、こちらは Authlete Web API とやりとりするためのオープンソースライブラリです。
この実装は「DB レス」です。 これの意味するところは、認可データ (アクセストークン等) や認可サーバー自体の設定、クライアントアプリケーション群の設定を保持するためのデータベースを用意する必要がないということです。 これは、Authlete をバックエンドサービスとして利用することにより実現しています。
この認可サーバーにより発行されたアクセストークンは、Authlete をバックエンドサービスとして利用しているリソースサーバーに対して使うことができます。 java-resource-server はそのようなリソースサーバーの実装です。 保護リソースエンドポイントの実装例を含んでいます。
Apache License, Version 2.0
src/main/resources/ekyc-ida
以下の JSON ファイル群は
https://bitbucket.org/openid/ekyc-ida/src/master/examples/response/
からコピーしたものです。それらのライセンスについては、OpenID Foundation の
eKYC-IDA ワーキンググループにお尋ねください。
https://github.com/authlete/java-oauth-server
Authlete (オースリート) は、OAuth 2.0 & OpenID Connect の実装をクラウドで提供するサービスです (overview)。 Authlete が提供するデフォルト実装を使うことにより、もしくはこの実装 (java-oauth-server) でおこなっているように Authlete Web API を用いて認可サーバーを自分で実装することにより、OAuth 2.0 と OpenID Connect の機能を簡単に実現できます。
この認可サーバーの実装を使うには、Authlete から API
クレデンシャルズを取得し、authlete.properties
に設定する必要があります。
API クレデンシャルズを取得する手順はとても簡単です。
単にアカウントを登録するだけで済みます (サインアップ)。
詳細は Getting Started を参照してください。
-
この認可サーバーの実装をダウンロードします。
$ git clone https://github.com/authlete/java-oauth-server.git $ cd java-oauth-server
-
設定ファイルを編集して API クレデンシャルズをセットします。
$ vi authlete.properties
-
maven がインストールされていること、
JAVA_HOME
が適切に設定されていることを確認します。 -
http://localhost:8080 で認可サーバーを起動します。
$ mvn jetty:run &
Docker を利用する場合は, ステップ 2 の後に以下のコマンドを実行してください.
$ docker-compose up
java-oauth-server
は authlete.properties
を設定ファイルとして参照します。
他のファイルを使用したい場合は、次のようにそのファイルの名前をシステムプロパティー
authlete.configuration.file
で指定してください。
$ mvn -Dauthlete.configuration.file=local.authlete.properties jetty:run &
この実装は、下表に示すエンドポイントを公開します。
エンドポイント | パス |
---|---|
認可エンドポイント | /api/authorization |
トークンエンドポイント | /api/token |
JWK Set エンドポイント | /api/jwks |
ディスカバリーエンドポイント | /.well-known/openid-configuration |
取り消しエンドポイント | /api/revocation |
イントロスペクションエンドポイント | /api/introspection |
ユーザー情報エンドポイント | /api/userinfo |
動的クライアント登録エンドポイント | /api/register |
PAR エンドポイント | /api/par |
グラント管理エンドポイント | /api/gm/{grantId} |
フェデレーション設定エンドポイント | /.well-known/openid-federation |
フェデレーション登録エンドポイント | /api/federation/register |
クレデンシャルイシュアメタデータエンドポイント | /.well-known/openid-credential-issuer |
JWT イシュアメタデータエンドポイント | /.well-known/jwt-issuer |
認可エンドポイントとトークンエンドポイントは、RFC 6749、OpenID Connect Core 1.0、 OAuth 2.0 Multiple Response Type Encoding Practices、RFC 7636 (PKCE)、 その他の仕様で説明されているパラメーター群を受け付けます。
JWK Set エンドポイントは、クライアントアプリケーションが (1) この OpenID プロバイダーによる署名を検証できるようにするため、また (2) この OpenID へのリクエストを暗号化できるようにするため、JSON Web Key Set ドキュメント (JWK Set) を公開します。
設定エンドポイントは、この OpenID プロバイダーの設定情報を OpenID Connect Discovery 1.0 で定義されている JSON フォーマットで公開します。
取り消しエンドポイントはアクセストークンやリフレッシュトークンを取り消すための Web API です。 その動作は RFC 7009 で定義されています。
イントロスペクションエンドポイントはアクセストークンやリフレッシュトークンの情報を取得するための Web API です。 その動作は RFC 7662 で定義されています。
ユーザー情報エンドポイントはユーザーの情報を取得するための Web API です。その動作は OpenID Connect Core 1.0 の Section 5.3. UserInfo Endpoint で定義されています。
動的クライアント登録エンドポイントは、クライアントアプリケーションの登録・更新をおこなうための Web API です。 その動作は RFC 7591 および RFC 7592 で定義されています。
PAR エンドポイントは、認可リクエストを事前に登録し、リクエスト URI の発行を受けるための Web API です。 その動作は RFC 9126 で定義されています。
グラント管理エンドポイントは、グラント ID の情報取得や失効をおこなうための Web API です。 その動作は Grant Management for OAuth 2.0 で定義されています。
フェデレーション設定エンドポイントは、認可サーバーのエンティティコンフィギュレーションを JWT 形式で返す Web API です。その動作は OpenID Federation 1.0 で定義されています。
次の例は Implicit フローを用いて認可エンドポイントからアクセストークンを取得する例です。
{クライアントID}
となっているところは、あなたのクライアントアプリケーションの実際のクライアント
ID で置き換えてください。 クライアントアプリケーションについては、Getting Started
および開発者コンソールのドキュメントを参照してください。
http://localhost:8080/api/authorization?client_id={クライアントID}&response_type=token
上記のリクエストにより、認可ページが表示されます。 認可ページでは、ログイン情報の入力と、"Authorize" ボタン (認可ボタン) もしくは "Deny" ボタン (拒否ボタン) の押下が求められます。 ログイン情報として、下記のいずれかを使用してください。
ログイン ID | パスワード |
---|---|
john | john |
jane | jane |
max | max |
inga | inga |
もちろんこれらのログイン情報はダミーデータですので、ユーザーデータベースの実装をあなたの実装で置き換える必要があります。
アカウント max
は OpenID Connect for Identity Assurance 1.0 (IDA)
の古いドラフト用のものです。当アカウントは verified claims を古いフォーマットで保持しています。
Authlete 2.2 は古いフォーマットを受け付けますが、Authlete 2.3 以降は拒否します。
アカウント inga
は IDA 仕様の実装者向けドラフト第三版以降のためのものです。
最新の IDA 仕様をテストする際は inga
を利用してください。
ただし、実装者向けドラフト第三版以降がサポートされるのは Authlete 2.3 からということにご留意ください。
古い Authlete は最新の IDA 仕様はサポートしません。
この実装をカスタマイズする方法については CUSTOMIZATION.ja.md に記述されています。 Authlete はユーザーアカウントを管理しないので、基本的には「ユーザー認証」に関わる部分についてプログラミングが必要となります。 これは設計によるものです。 ユーザー認証の仕組みを実装済みの既存の Web サービスにもスムーズに OAuth 2.0 と OpenID Connect の機能を組み込めるようにするため、Authlete のアーキテクチャーは認証と認可を慎重に分離しています。
この実装では、認可ページを実装するために Viewable
クラスを使用しています。
このクラスは Jersey (JAX-RS の参照実装) に含まれているものですが、JAX-RS
2.0 API の一部ではありません。
- RFC 6749 - The OAuth 2.0 Authorization Framework
- RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage
- RFC 6819 - OAuth 2.0 Threat Model and Security Considerations
- RFC 7009 - OAuth 2.0 Token Revocation
- RFC 7033 - WebFinger
- RFC 7515 - JSON Web Signature (JWS)
- RFC 7516 - JSON Web Encryption (JWE)
- RFC 7517 - JSON Web Key (JWK)
- RFC 7518 - JSON Web Algorithms (JWA)
- RFC 7519 - JSON Web Token (JWT)
- RFC 7521 - Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants
- RFC 7522 - Security Assertion Markup Language (SAML) 2.0 Profile for OAuth 2.0 Client Authentication and Authorization Grants
- RFC 7523 - JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants
- RFC 7591 - OAuth 2.0 Dynamic Client Registration Protocol
- RFC 7592 - OAuth 2.0 Dynamic Client Registration Management Protocol
- RFC 7636 - Proof Key for Code Exchange by OAuth Public Clients
- RFC 7662 - OAuth 2.0 Token Introspection
- RFC 9126 - OAuth 2.0 Pushed Authorization Requests
- OAuth 2.0 Multiple Response Type Encoding Practices
- OAuth 2.0 Form Post Response Mode
- OpenID Connect Core 1.0
- OpenID Connect Discovery 1.0
- OpenID Connect Dynamic Client Registration 1.0
- OpenID Connect Session Management 1.0
- Authlete - Authlete ホームページ
- authlete-java-common - Java 用 Authlete 共通ライブラリ
- authlete-java-jaxrs - JAX-RS (Java) 用 Authlete ライブラリ
- java-resource-server - リソースサーバーの実装
目的 | メールアドレス |
---|---|
一般 | [email protected] |
営業 | [email protected] |
広報 | [email protected] |
技術 | [email protected] |