認証認可
認証
JobStreamer を利用するために認証(ログイン)情報が必要です。
ログインしていない状態で Console のいずれかの URL を開くとログイン画面に遷移します。
http://localhost:3000/login
ログイン画面からデフォルトの下記ユーザのID/Passwordを使ってログインしてください。
- ID : admin
- Password : password123
ログアウトする場合はヘッダー右のメニューから「Logout」を選択して下さい。
認可
ログインユーザにはジョブに対して三つの権限が存在します。
- admin : 全ての操作が可能
- operator : ジョブの情報参照、実行は可能だがジョブの編集は不可
- watcher : ジョブの情報参照のみ可能
ジョブの実行、編集にはそれぞれ下記の操作が含まれます。
- ジョブの編集
- ジョブ定義の変更
- ジョブ設定の変更
- ジョブの削除
- ジョブの実行
- ジョブの実行・停止・再開・破棄
- ジョブスケジュールの変更
Console 上で権限のない操作を行った場合にはエラーメッセージが表示されて実行されません。
デフォルトで存在する “admin” というユーザには “admin” 権限が付与されています。
それ以外の権限を持つユーザを作成する場合は以下の「ユーザ管理」を参照してください。
ユーザ管理
現状、ログインユーザ作成・削除機能をAPIのみで提供してます。
下記のサンプルを基に実行してください。
# "operator" 権限を持った、"test-user" というログインユーザを "password123" というパスワードで作成
curl -XPOST localhost:45102/user -H 'Content-Type: application/edn' -d '{:user/id "test-user" :user/password "password123" :role "operator"}'
# "test-user" という ID のログインユーザを削除
curl -XDELETE localhost:45102/user/test-user
API 実行時の認証
Control-bus の API を利用するためにも認証処理が必要となります。
まず下記の通りログイン API を実行して認証トークンを取得します。
# username : ログインユーザID
# password : ログインユーザパスワード
curl -XPOST localhost:45102/auth -H "Content-Type: application/edn" -d '{:user/id "admin" :user/password "password123"}' -v
{:token "5f080f9c-3023-4a6a-89fb-de983f768c4d"}
この場合、 5f080f9c-3023-4a6a-89fb-de983f768c4d が認証トークンです。
次にこのトークンを使って、“Authorization: Token 5f080f9c-3023-4a6a-89fb-de983f768c4d” ヘッダを付与してリクエストすると、認証ユーザが権限を持つ任意の API を実行することが出来ます。
curl -XGET -H 'Content-Type: application/edn' -H 'Authorization: Token 5f080f9c-3023-4a6a-89fb-de983f768c4d' http://localhost:45102/default/jobs
{:results [...]}
OAuth2.0認証
JobStreamerでは認証方式として上記の仕組みの他にOAuth2.0を利用できます。
OAuth2.0による認証ではユーザはoperatorの権限を持ったguestユーザとしてログインされます。
利用方法
OAuth2.0を利用するためにはcontrol-busのクラスパス上に設定ファイルが必要になります。
;; resources/job-streamer-control-bus/config.edn
{:auth {:console-url "http://xxx.yyy.z.ww:3000"
:control-bus-url "http://xxx.yyy.z.ww:45102"
:oauth-providers {"yahoo" {:name "Yahoo" ;; 必須。ボタンの表示名
:class-name "yahoo" ;; オプション。ボタンのクラス名
:domain "https://auth.login.yahoo.co.jp" ;; 必須。OAuth2.0 認可サーバのドメイン
:client-id "xxxx" ;; 必須。OAuth2.0 のクライアントID
:client-secret "xxxx" ;; 必須。OAuth2.0 のクライアントシークレット
:scope "openid" ;; オプション。OAuth2.0 のスコープ。
:auth-endpoint "yconnect/v2/authorization" ;; 必須。OAuth2.0 の認可エンドポイント。
:token-endpoint "yconnect/v2/token"} ;; 必須。OAuth2.0 のトークンエンドポイント。
"github" {:name "Github"
:class-name "github"
:domain "https://github.com"
:client-id "xxxx"
:client-secret "xxxx"
:auth-endpoint "login/oauth/authorize"
:token-endpoint "login/oauth/access_token"}}}}
また利用するOAuth2.0 認証サーバでの設定が必要になります。
動作確認をしたOAuth2.0 認証サーバを以下に示します。
* Github
* Yahoo! ID連携