Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/oracle-japan/ochacafe-mp-jwt-demo
OCHaCafe 4 #4 マイクロサービスの認証・認可とJWTのデモ
https://github.com/oracle-japan/ochacafe-mp-jwt-demo
helidon java jwt microprofile
Last synced: about 4 hours ago
JSON representation
OCHaCafe 4 #4 マイクロサービスの認証・認可とJWTのデモ
- Host: GitHub
- URL: https://github.com/oracle-japan/ochacafe-mp-jwt-demo
- Owner: oracle-japan
- Created: 2021-06-28T07:27:41.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2021-11-03T08:57:30.000Z (about 3 years ago)
- Last Synced: 2023-03-06T21:45:11.016Z (over 1 year ago)
- Topics: helidon, java, jwt, microprofile
- Language: Java
- Homepage:
- Size: 64.5 KB
- Stars: 0
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# OCHaCafe Season4 - #4 マイクロサービスの認証・認可と JWT
[MicroProfile JWT RBAC](https://download.eclipse.org/microprofile/microprofile-jwt-auth-1.2/microprofile-jwt-auth-spec-1.2.html) を使用したマイクロサービスの認証・認可のデモのソースコードです.
## デモ構成
```txt
.
├── README.md
├── auth [ユーザー認証用サービス(OIDC + FIDO)]
│ ├── Dockerfile
│ ├── README.md
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── me
│ │ │ └── shukawam
│ │ │ └── example
│ │ │ └── mp
│ │ │ └── auth
│ │ │ ├── AuthResource.java [ユーザー認証エンドポイント定義]
│ │ │ ├── AuthService.java [認証関連サービスクラス]
│ │ │ ├── IdcsResource.java [MicroProfile - REST Client]
│ │ │ ├── data
│ │ │ │ └── UserProfile.java [OpenID Connect UserInfo endpoint response def.]
│ │ │ ├── log
│ │ │ │ └── LoggerFactory.java
│ │ │ └── package-info.java
│ │ └── resources
│ │ ├── META-INF
│ │ │ ├── beans.xml
│ │ │ ├── microprofile-config.properties
│ │ │ └── native-image
│ │ │ └── reflect-config.json
│ │ ├── application.yaml [アプリケーションの設定ファイル]
│ │ └── logging.properties
│ └── test
│ └── java
│ └── me
│ └── shukawam
│ └── example
│ └── mp
│ └── auth
│ └── MainTest.java
├── deploy
│ └── kubernetes [Kubernetes デプロイメント用 Manifest]
│ ├── base
│ │ ├── auth.yaml
│ │ ├── event.yaml
│ │ ├── kustomization.yaml
│ │ ├── mandatory.yaml
│ │ └── mp-jwt-ingress.yaml
│ └── overlays
│ └── kustomization.yaml
├── event [認証・認可制御対象アプリケーション]
│ ├── Dockerfile
│ ├── README.md
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── me
│ │ │ └── shukawam
│ │ │ └── example
│ │ │ └── mp
│ │ │ └── event
│ │ │ ├── CreateEventRequest.java
│ │ │ ├── Event.java
│ │ │ ├── EventResource.java [Eventサービスに対するエンドポイント定義]
│ │ │ ├── EventService.java [Event関連処理のサービスクラス]
│ │ │ ├── exception
│ │ │ │ ├── EventNotFoundException.java
│ │ │ │ └── EventNotFoundExceptionMapper.java
│ │ │ └── package-info.java
│ │ └── resources
│ │ ├── META-INF
│ │ │ ├── beans.xml
│ │ │ ├── init_script.sql
│ │ │ ├── microprofile-config.properties
│ │ │ ├── native-image
│ │ │ │ ├── native-image.properties
│ │ │ │ └── reflect-config.json
│ │ │ └── persistence.xml
│ │ ├── application.yaml [アプリケーションの設定ファイル]
│ │ ├── hibernate.properties
│ │ └── logging.properties
│ └── test
│ └── java
│ └── me
│ └── shukawam
│ └── example
│ └── mp
│ └── event
│ └── MainTest.java
└── test
└── test.http [Simple e2e test for VSCode REST Client]
```本サンプルアプリケーションは、 [Helidon - Security Provider(OidcProvider, IDCSRoleMapper)](https://oracle-japan-oss-docs.github.io/helidon/docs/v2/#/mp/security/02_providers#_idcs_role_mapper) を用いてマイクロサービスの認証・認可を実現しています.`auth/src/resources/application.yaml`, `event/src/resources/application.yaml`に当該機能の設定が記載されています.以下の部分を自身の環境に合わせて修正してください.(直接ファイルを編集するのではなく、環境変数に設定することを推奨します)
下記以外のパラメーターに関しては [Helidon MP - Security Provider(OIDC Provider)](https://oracle-japan-oss-docs.github.io/helidon/docs/v2/#/mp/security/02_providers#_oidc_provider) をご参照ください.```yaml
# Security config
security:
# Set to true for production - if set to true, clear text passwords will cause failure
config:
require-encryption: false
properties:
# Identity Provider - IDCS
idcs-uri:
idcs-client-id:
idcs-client-secret:
frontend-uri:
proxy-host:
# ...
```## アクセス制御概要
業務処理を担当するマイクロサービス (event) のエンドポイントに対して RBAC で制御をかけています.
| Path | Role |
| -------------------------- | ------------ |
| GET /event | Admin, Guest |
| GET /event/id/{id} | Admin, Guest |
| GET /event/season/{season} | Admin, Guest |
| POST /event | Admin |
| DELETE /event/id/{id} | Admin |`http://:/auth/login`へアクセスし、認証情報を入力するとブラウザに OAuth 2.0 のアクセストークンが返却されるので、その取得したアクセストークンを用いて event サービスに対して API リクエストを行います.
### 例
リクエスト;
```bash
curl --request GET --url http://:/event/id/215000 --header 'authorization: Bearer eyJ...'
```レスポンス(Role: Guest);
```http
HTTP/1.1 200 OK
Server: nginx/1.17.8
Date: Tue, 22 Jun 2021 08:40:00 GMT
Content-Type: application/json
Content-Length: 127
Connection: close{
"eventDate": "2021-07-07Z",
"id": 215000,
"presenter": "k",
"season": "4",
"title": "マイクロサービスの認証・認可とJWT"
}
```リクエスト;
```bash
curl --request POST --url http://:/event --header 'authorization: Bearer eyJ...' --header 'content-type: application/json' --data '{"title": "Kubernetesのオートスケーリング","season": "4","presenter": "n","eventDate": "2020-08-11"}'
```レスポンス(Role: Guest);
```http
HTTP/1.1 403 Forbidden
Server: nginx/1.17.8
Date: Tue, 22 Jun 2021 08:42:18 GMT
Content-Length: 0
Connection: close
```レスポンス(Role: Admin);
```http
HTTP/1.1 200 OK
Server: nginx/1.17.8
Date: Tue, 22 Jun 2021 12:18:58 GMT
Content-Type: application/json
Content-Length: 119
Connection: close{
"eventDate": "2020-01-11Z",
"id": 216000,
"presenter": "n",
"season": "4",
"title": "Kubernetesのオートスケーリング"
}
```## Appendix - IDCS の設定
1. IDCS にログインし、"機密アプリケーション"を作成する
2. クライアントを登録する
1. 許可する権限付与タイプとして以下を追加する
- クライアント資格証明
- JWT アサーション
- リフレッシュトークン
- 認可コード
2. HTTPS 以外の URL を許可にチェックを入れる(HTTPS であれば不要な設定です)
3. リダイレクト URL を`http://:/oidc/redirect`と設定する
- e.g. `http://localhost:7987/oidc/redirect`
4. クライアント・タイプは"機密"を選択する