3
2

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 1 year has passed since last update.

API ConnectとAzure AD間でSAML連携を実装してみた

Last updated at Posted at 2022-02-09

#はじめに
この記事では、API呼び出しの際の認証方法として、Azure ADとSAMLプロトコルで連携する方法を紹介します。
API Connectの基本的なセキュリティー機能では、Rest APIでよく使われるClientID/ClientSecretや、Basic認証、OAuth認可等の仕組みを提供していますが、SAML認証は含まれていません。しかし、API ConnectのAPI Gatewayコンポーネントとして同梱されているDataPowerではSAMLプロトコルもサポートしますので、今回は、DataPowerのカスタム開発する方法を紹介します。

実装概要

実装は以下のようなイメージとなります。
Azure ADとのSAML連携を実施するためのマルチ・プロトコル・ゲートウェイの処理ルールとして設定します。
マルチ・プロトコル・ゲートウェイは、新規にカスタムドメインを作成して設定するか、API Connect用のドメインであるapiconnectドメインに設定することもできます。今回は、簡易的な手順とするため後者で設定しています。
image.png

フローは、以下のような流れとなります。

①. ClientからService Provider(SP)であるAPI ConnectへのAPIリクエスト

①. Identity Provider(IdP) であるAzure ADへリダイレクトし、エンドユーザー認証の要求

③. エンドユーザーが認証されると、IdPからSPへSAML Assertionを応答

④. SPからClient(エンドユーザー)へAPI応答(Assertionを応答することが一般的ですがこの例では、APIコールまで進めています)

この記事では、上記のAPI ConnectとAzureAD間の初回認証連携のみを検証しているため、以下の処理は含まれていません。

  • ①のAPIリクエストでSAML Assertionが含まれているかどうかのチェック(含まれていたらリダイレクトはせずAssertion検証へ)
  • ①のAPIリクエストでSAML Assertionが問題ないかの検証(検証が問題なければAPIコールへ)
  • ②の/redirectエンドポイントに対する要求元の制限するフィルター設定

実装手順

1. Azure AD設定

1.1 Azure Portalアクセス

Microsoft AzureのPortalサイトにアクセスします。
Azure Active Directoryサービスにアクセスします。

image.png

以下のようなテナントの管理メニューが表示されます。
テナント登録がまだの場合は、登録から実施する必要があります。

image.png

また、ドメイン登録がまだの場合は、ドメイン作成から実施する必要があります。

image.png

1.2 アプリケーション登録

API Connectとの連携に使用するアプリケーションを登録します。
以下は一例ですので、お使いの環境に合わせて設定してください。

image.png

独自のアプリケーションを作成します。

image.png

アプリケーションが作成されたら、管理メニューのシングル サインオンからSAMLを選択します。

image.png

お使いの環境に合わせてSAMLのセットアップを実施します。
基本的なSAML構成で識別子(エンティティーID)と、応答URLが必須のパラメーターとなります。
この例では、応答URLにAPI ConnectのSAML Assertion受け取りURL(/redirect)を設定しています。

image.png

2. DataPowerカスタム設定

DataPowerのWeb UIにアクセスします。
今回は、apiconnectドメインにマルチ・プロトコル・ゲートウェイを構成します。

2.1 マルチ・プロトコル・ゲートウェイ設定

マルチ・プロトコル・ゲートウェイの稼働に必要となる各種設定を実施します。
フロント・サイド・プロトコルとして、apiconnectのHTTPSサービスと異なるポートを利用してハンドラーを設定します。
また、バックエンドは、リクエスト内容に応じて変わるため、Typeとして、dynamic-backendsを指定します。

image.png

2.2 処理ポリシー設定

処理ポリシーとして、最初の概要図で示したフロー処理を実装する処理ルール・アクションを設定していきます。

image.png

2.2.1 redirect処理

Azure ADからのSAML Assertionを受け取る処理ルールを設定します。
処理ルールのマッチングルールとしては、要求パスに「/redirect」が含まれる場合としています。

image.png

そのあとのGatewayScriptアクションとして、以下のようなコードを設定します。
AzureADからの応答後にそのままバックエンドのAPIを呼び出す処理になります。

var hm = require('header-metadata');
var service = require('service-metadata');

var ContentType = hm.original.get('Content-Type');
service.setVar('var://service/routing-url', 'https://x.x.x.x/v1/test');

2.2.2 service処理

Clientからの要求を受け取る処理ルールを設定します。
今回は、マッチングルールとして、簡易的にすべてのパスとしています。

image.png

そのあとのGatewayScriptアクションとして、以下のようなコードを設定します。
バックエンドリクエストをスキップし、Azure ADにリダイレクトさせる処理となります。

var sm = require('service-metadata');
var hm = require('header-metadata');

sm.setVar('var://service/mpgw/skip-backside', true);

hm.response.statusCode = '302 Moved Temporarily';
hm.response.set('Location', 'https://login.microsoftonline.com/ef10fbb5-****-****-****-*****/saml2?SAMLRequest=jZFbS8QwEIXf91eUvG8v6T20CwsiFBRExQffZtOsG2iSmpmK%2B%2B%2BtVdEiiPM4zJxzvplN8FkNghlGsZ%2FoZG%2FV86SQglczWGzZ5K1wgBqFBaNQkBR3%2B%2BsrwcNYGEXQAwHbBD%2Bqu2iZ7tO8gKTmh7JO0kOcyTzLy6xPKsmrPitUkdZ5xis4sOBBedTOtmyWZEGHN4CoX1TLjjCgYsGl81It0b5aazvESXUWCSzNGjFPtnGx5el9XIq8FLwO87J4XO8sbGKB%2Fptw9I6cdAPbrfabxdT%2F50YzjPI087HdiWgUUTSfbBwHLeG969WTRvLn0FmjpXfojhRKZyI5ITkzTyK6aPTagD830Yfvd5gm%2Bv253Rs%3D');

Azure ADのリダイレクト先のURLには、SAMLRequestというクエリーパラメーターに、最初に設定したAzure ADのアプリに基づいた認証情報が必要になります。
今回は、こちらの記事を参考に事前に生成したものを設定しています。詳細は、Azure ADのサポートページをご参照ください。

これで設定は完了となります。

実施例

フロー動作を確認していきます。

① SPリクエスト

ブラウザーからAPI Connectのマルチ・プロトコル・ゲートウェイのエンドポイントにアクセスします。
serviceの処理ルールに入り、Azure ADにリダイレクトされます。

image.png

② IdPへリダイレクト、③ IdPからのAssetion応答

アカウントを選択して認証処理を進めます。

image.png

image.png

image.png

④ APIリスポンス

redirect処理リールに戻り、バックエンドのAPIが呼び出されその結果が応答されます。

image.png

以上になります。

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?