LoginSignup
16
15

More than 5 years have passed since last update.

Amazon Cognito User Poolsを使ってZendeskのヘルプセンターにシングルサインオンを行う

Posted at

概要

Amazon Cognito User Poolsで認証認可を行うアプリケーションからZendeskへSSOをする場合を考えてみます。
自分たちのwebサービス用のダッシュボードからサポートやヘルプデスクはZendeskに投げてしまいたいというケースは結構あると思うのですが、そういったユースケースに使えると思います。

構成

Untitled.png

構成はAPI Gateway + Lambdaの構成で考えます。
まず、前段のAPI認証では、API GatewayのCustom Authorizerの機能を使います。詳細はAmazon API Gateway の Custom Authorizerを使い、User PoolsのユーザでAPI認証を行うにあります。

API認証を通過して認可を受ければ、SSO用LambdaファンクションでZendeskへのSSOを実施します。

Zendeskの設定

JWT(JSON Webトークン)を使用したシングルサインオンの設定
今回はこちらを使用してSSOを実装します。

スクリーンショット 2016-06-01 9.27.42.png
Zendeskのコンパネからエンドユーザに対するSSOを有効化してください。その際に共有シークレットが表示されるのでそれをメモしてください。共有シークレットは必ず外部に漏れないように気をつけましょう。

SSO Lambda function

'use strict';
var jwt = require('jwt-simple');
var uuid = require('node-uuid');

var subdomain = '<Zendeskのサブドメイン>';
var shared_key = '<Zendeskの共有シークレット>';

module.exports.handler = function(event, context) {
  var payload = {
    iat: (new Date().getTime() / 1000),
    jti: uuid.v4(),
    name: event.email,
    email: event.email
  };
  var token = jwt.encode(payload, shared_key);
  var sso_endpoint = 'https://' + subdomain + '.zendesk.com/access/jwt?jwt=' + token;
  context.succeed(sso_endpoint);
};

SSO用のエンドポイントを返却します。後はクライアント側でlocation.href = JSON.parse(sso_endpoint);とかやってあげるとZendeskにシングルサインオン実施されます。

実践

1. User Poolsを使ったアプリケーションにログインします。

スクリーンショット 2016-06-01 9.35.30.png

2. horike@digitalcube.jpでログインを行えました。そしてサポートのボタンをクリックします。

スクリーンショット 2016-06-01 9.36.01.png

3. SSOが走ってZendeskへリダイレクトされます。Zendeskで側を確認すると自動でhorike@digitalcube.jpというユーザが作られているのがわかります。

スクリーンショット 2016-06-01 9.36.33.png

16
15
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
16
15