4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenAMでOAuth 2.0 Authorization Serverをたてる

Posted at

従業員向けのIAMでOAuth 2.0サポートして嬉しいことがあるの?

情シスやってると、Web APIだとか、そのアクセス認可技術であるOAuth 2.0とか、そういうキーワードとはこれまで中々ご縁がありませんでした><
ただ、最近になって、わたしの所属してる会社では、React.jsなどを使ったフロントエンドの実装とWeb APIの実装を組み合わせて、業務アプリを内製で作るという軽い☆ノリ風潮みたいなのも、ちらほら出てきています。そういったアプリケーション(のフロントエンドの実装)はOAuth のクライアントとなりうるわけですから、従業員向けのIAMでOAuth 2.0サポートすると、これからのアプリケーションのための基盤になると思っています。どうしてもコンシューマーサービス向けに技術であるっていう印象が強いですけどね。

OAuth 2.0の学習

OAuthっていっても、バージョン1.0もあれば、1.0aもあるし、なんちゃってOAuthみたいなものも世の中には多く出回っているかと思います。ただ、IETFや、oauth.netにアクセスするとわかりますが、これらはすでに廃止されています。よって、わたしのようにこれから勉強する自称若者はOAuth 2.0から始めたらいいんじゃないでしょうか?わたしもそうしたので、1.0とか1.0aのバックグラウンドとか歴史は全く知りません。

以下に、勉強するうえで参考にしたサイトを張っときます。

OpenAMをOAuth 2.0 Authorization Serverにする

ぶっちゃけ一瞬でできます。

管理者アカウント(amadmin)でOpenAMにサインインし、ダッシュボードからConfigure OAuth Providerをクリックするだけです。

001.JPG

OAuth のクライアントを登録する

これも簡単です。

Applications -> OAuth2.0をクリックし、

002.JPG

client_idclient_secretに該当するパラメータを設定します。

003.JPG

余談ですが、このインターフェースに少し違和感があります。(UIがレガシーとかではなく、)一般的にWeb API利用をするときのクライアント登録って、そのクライアントの識別子(client_id)とそのシークレット(client_secret)って、Authorization Server側で作られるような気がしますが...。まぁ、いっか(´ρ`)

あとは、クライアントタイプの選択や、リダイレクトURIを設定すれば、とりあえず使えるようにはなります。今回は以下のように登録しています。

  • クライアントタイプ
    • Confidential
  • リダイレクトURI
  • スコープ
    • mail
004.JPG

試しにAuthorization Code Grant

では、テストがてらAuthorization Code Grantを試してみましょう。
Authorization Code Grantは以下のようなフローです。(IPAのサイトより引用)

図中 1)のリクエスト(Authorization Request)

まずはAuthorization RequestをAuthorization Serverに送信します。
ブラウザで以下のURLをリクエストします。

https://iam.example.com/openam/oauth2/authorize?
    response_type=code&
    client_id=testclient&
    state=xyz&
    scope=mail&
    redirect_uri=http%3A%2F%2Flocalhost%2Fcb

意訳すると、「testclientっていう識別子のOAuthクライアントがリソース(メールの情報)にアクセスできる権限がほしいんだー(懇願)」みたいな感じです。(適当

図中 2)のリクエスト(Authentication and )

次はただの認証です、 1)のリクエストの後、OpenAMの認証画面が表示されるので、適当なユーザーでサインインします。この認証のステップはOAuth 2.0の仕様には定義されていません。

図中 3)のリクエスト(Authorization Response)

認証後、リソースへOAuthのクライアントがアクセスすることを許諾します。

005.JPG

その後、Authorization CodeというパラメータがQuery Stringで返却されます。

http://localhost/cb?
    code=87e59da5-d98b-4abc-be5d-56fde5170b00&
    scope=mail&
    iss=https%3A%2F%2Fiam.example.com%3A443%2Fopenam%2Foauth2&
    state=xyz&
    client_id=testclient

図中 4)のリクエスト(Access Token Request)

受け取ったAuthorization CodeをAccess Tokenと交換します。POSTで送信するため、cURLなどで試しましょう。

$ curl -k 
    -H "Content-Type: application/x-www-form-urlencoded"
    -H "Authorization: Basic dGVzdGNsaWVudDpwYXNzd29yZA=="
    -d "grant_type=authorization_code"
    -d "code=87e59da5-d98b-4abc-be5d-56fde5170b00"
    -d "redirect_uri=http%3A%2F%2Flocalhost%2Fcb"
    https://iam.example.com/openam/oauth2/access_token

{
  "access_token":"44059873-80f9-4b6f-b4ea-a05b7631e81c",
  "scope":"mail",
  "token_type":"Bearer",
  "expires_in":3599
}

こんな感じでAccess Tokenが返却されるので、このAccess Tokenをつかってリソース要求すればいいという感じですね。

今日はOAuth 2.0のAuthorization Serverをたてて、Authorization Code Grantを試してみました。
明日は適当なクライアントを用意して、動かしてみようかと思います。

ばい!

4
6
1

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
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?