LoginSignup
10
9

More than 3 years have passed since last update.

Azure ADをIdPに設定してALBでユーザ認証してみた

Last updated at Posted at 2020-03-09

Azure ADをIdPに設定してALBでユーザ認証してみました。

追記(2020-03-16)

ユーザークレーム(x-amzn-oidc-data)のexpireは2分のようですが、アクセストークン(x-amzn-oidc-accesstoken)のexpireは初回ログイン時から変わらない(=期限切れになる)ようです。

  • IdP によって ID トークンに有効な更新トークンが提供されている場合、ロードバランサーは更新トークンを保存し、アクセストークンの有効期限が切れるたびにこれを使用して、セッションがタイムアウトするか、IdP の更新に失敗するまで、ユーザークレームを更新します。

上記リンクのAWSのドキュメントの記述とちょっと合わない感じがしますが、バックエンド側はドキュメント記載の通りユーザークレームでユーザ認証するのであれば問題ないのかな?

手順

  1. HTMLを出力するLambdaを作成し、ALBのターゲットに設定する
  2. Azure ADにアプリケーションを登録する
  3. ALBを設定する
  4. テストする

1. HTMLを出力するLambdaを作成し、ALBのターゲットに設定する

以下記事を参考に、Lambdaを作成してALBのターゲットに設定します。
 https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/lambda-functions.html
ALBのリスナーはHTTPSに設定し、Route53にALBのエイリアスレコードを登録します。

lambda_function.py
def lambda_handler(event, context):

    print(event)

    res = {
        "isBase64Encoded": False,
        "statusCode": 200,
        "statusDescription": "200 OK",
        "headers": {
            "Set-cookie": "cookies",
            "Content-Type": "text/html"
        }
    }

    res['body'] = """<html>
    <head>
    <title>hello world</title>
    </head>
    <body>
    <h1>Hello World</h1>
    </body>
    </html>"""

    return res

2. Azure ADにアプリケーションを登録する

Azureにログインして、Azure Active DirectoryーApp registrationsからアプリケーションを登録します。
Redirect URIは以下を指定します。
 https://Route53に登録したALBのエイリアスレコード/oauth2/idpresponse

スクリーンショット 2020-03-10 4.25.56.png

次にアプリケーションのクライアントシークレットを作成します。

2_sec.png

最後に各種エンドポイントを確認します。

3_ep.png

下記コマンドでも確認できます。

curl https://login.microsoftonline.com/********-****-****-****-************/v2.0/.well-known/openid-configuration

3. ALBを設定する

ALBのリスナーを編集して、Authenticateアクションを追加します。

4_alb.png

ALBの設定値 対応するAzure側の値
Authenticate OIDC
Issure Authorization endpointの"/oauth2/v2.0/authorize"の部分を"/v2.0"で置換したURL
Authorization endpoint OAuth 2.0 authorization endpoint (v2)
Token endpoint OAuth 2.0 token endpoint (v2)
User info endpoint https://graph.microsoft.com/oidc/userinfo
Client ID Application (client) ID
Client secret 作成したシークレット

4. テストする

ALBのエイリアスレコードをURLに指定するとサインイン画面が表示されます。

5_login.png

サインイン後、Lambdaが出力するHTMLが表示されれば成功です。

6_lambda.png

CloudwatchLogsを確認すると、アクセストークン等が渡されているのが分かります。

雑感

  • 慣れてしまえば設定はとても簡単です。(多分)
  • OpenID Connectで認証するがブラウザ・ALB間はアクセストークンでなくセッションクッキーでセキュリティを担保する方式は、アクセストークン漏洩の問題がなくてなんかいい感じ。
10
9
0

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
10
9