ヘルプセンターでJWTによるユーザー認証(外部サービスを通じた認証)を有効にするための設定

ヘルプセンターでJWTによるユーザー認証(外部サービスを通じた認証)を有効にするための設定

この機能は、現在、一部のアカウントでのみ利用できます。今後、段階的に利用可能になります。なお、先行アクセスを希望する場合は、 こちらのフォームからご申請ください。 

さまざまなクラウドサービスを連携して利用する際、ユーザー認証を適切に行うことが重要です。サービス間でユーザー情報をやりとりして認証を適切に行うためには、安全性の高い仕組みが必要になります。

また、どのようなユーザーがどのようなデータにアクセスしようとしているかを踏まえて認証する必要があります。これにより、適切な権限を持つユーザーのみが、必要な範囲のデータにアクセスできるようになります。あわせて、認証に関するデータのやりとりでは、改ざんを検知する仕組みを用いて機密性や完全性を保つことが重要です。


ユーザー認証が行われる場面の例:

 

  • Webサイト/Webサービス:Webメール、ソーシャルメディア、ネットショップ(ECサイト)、会員制Webサイトの利用
  • 決済:銀行取引、オンライン決済、暗号通貨の利用
  • 社内ネットワーク:社内システムや内部情報へのアクセス
  • 医療:患者の個人情報やカルテの参照
  • 行政:行政手続き、住民情報の確認

 

上記をはじめとするさまざまな場面で、不正アクセスを防止してデータを保護し、プライバシーを守ることが求められます。

認証方法の種類 

ユーザー認証を行うための方法にはいくつかの種類があります。

 

  • パスワード認証:本人のみが知っている情報(パスワード)をもとに認証を行います。
  • 生体認証:指紋認証や顔認証など、生体的な特徴を用いて認証を行います。
  • 専用機器やアプリを用いた認証:専用の物理的な機器(ハードウェア)またはアプリ(ソフトウェア)を用いて認証を行います。
  • 多要素認証:2つ以上の要素を組み合わせて認証を行います。

JWTとは

JWTとは、「JSON Web Token」の略で、認証に必要なデータをやりとりするための仕組みや規格の名称です。また、この仕組みにおいて用いられる認証用データ(トークン)を指すこともあります。JWTでは、認証用データに対して暗号化(署名)の処理を行います。安全性を保つと同時にデータ量を抑えて処理することができるため、さまざまなWebサービスで導入されています。特に、外部サービスと連携したユーザー認証(シングルサインオン)を行う際に利用されています。この仕組みを用いると、認証のために必要なデータを常に保持しておく必要がなくなります。必要な時に必要な範囲の認証をスムーズに行うことが可能になります。 

 

また、認証処理においてデータをコンパクトな形で取り扱うことができ、処理がしやすくなります。認証のたびに毎回ユーザー名とパスワードを聞いたりしなくても、適切に認証することが可能になります。

JWTのメリット

JWTのメリットは以下のとおりです。

 

  • 認証ユーザー認証の仕組みとして広く用いられています。サービスへのサインイン時など、認証が必要なタイミングでJWTを通じた認証を行うことが可能です。特に、1つのアカウントで複数のサービスへのサインインを可能にするシングルサインオンを有効にする際にも役立ちます。
  • セキュリティJWTを用いると、2つのサービス間で安全にデータをやりとりできます。公開鍵と秘密鍵を通じた署名を用いることで、適切に認証を行えます。また、データが改ざんされていないことも担保できます。

Zoho DeskのヘルプセンターにおけるJWTを用いた認証 

Zoho Deskのヘルプセンターの利用者は、ヘルプセンターでユーザー登録を行うかどうかによって、ゲスト登録済みユーザーの2つに分類されます。

 

  • ゲスト:ヘルプセンターでユーザー登録を行っていない利用者は、ゲストと呼ばれます。ヘルプセンター内の記事の表示、問い合わせの送信、コミュニティ(フォーラム)での投稿の表示などが可能です。ただし、問い合わせのステータスの確認、コミュニティでの投稿の追加やコメント、投稿のフォローなどの操作は行うことができません。
  • 登録済みユーザー:ヘルプセンターでユーザー登録(アカウント作成)を行った利用者は、登録済みユーザーと呼ばれます。なお、ユーザー登録は、フォームからユーザー自身で行うことが可能です。また、SAMLやJWTなどの仕組みを利用して、他サービスの認証情報を用いて行えるようにすることもできます。登録済みユーザーが可能な操作は以下のとおりです。
    • ヘルプセンター内の記事の表示(ナレッジベースへのアクセス)
    • 問い合わせの送信、問い合わせのステータスの確認
    • 自身と同じ組織に所属する他のユーザーが送信した問い合わせの確認
    • コミュニティ(フォーラム)での投稿の追加、投稿のフォロー
    • コミュニティ(フォーラム)の投稿へのコメント

利用条件

必要な権限
この機能を利用するには、管理者権限のうち、ヘルプセンターに関する権限が必要です。
各プランの機能と制限を確認する

Zoho DeskのヘルプセンターにおけるJWTを用いたユーザー認証の仕組み

ユーザーがヘルプセンターにサインインする際にJWTを通じて認証が行われる場合、以下のような流れで処理が行われます。 

  • Zoho Deskのヘルプセンターでサインイン用のボタンをクリックすると、IDプロバイダー(IdP、認証を行うサービス)の画面に移動します。 
  • 認証情報を入力し、内容の適切性が確認されると、認証トークンが発行されます。 
  • 該当のトークンは暗号化され、Zohoの認証サービス(Zoho IAM)に対してパラメーターとして送信されます。この時、認証完了後に表示するURLを表すパラメーター(return_to)もあわせて送信されます。 
  • Zohoの認証サービス(Zoho IAM)では、これらのパラメーターを受け取って、認証結果の検証処理が行われます。 
  • 具体的には、トークンが復号され、JWTの秘密鍵を用いてユーザー情報が適切かどうか検証が行われます。 
  • 検証が適切に完了すると、ヘルプセンターへのサインインが完了します。ユーザーの画面には、上記の「return_to」というパラメーターで指定されているページ(サインイン後のページ)が表示されます。

JWTの詳細 


データの種類
内容
ヘッダー
認証用データ(トークン)の種類や取り扱いに関するデータ(メタデータ)です。具体的には、JWTの種類やサインインのアルゴリズムなどを表すパラメーターです。
ペイロード

認証用データ(トークン)の本体です。具体的には以下のようなパラメーターです。

  • email:メールアドレス
  • nbf:「not before」の省略形。認証トークンが有効になる日時
  • exp:「expiration time」の省略形。認証トークンの有効期限
  • jti:「JWT ID」の省略形。認証トークンを識別するためのID(識別用情報)該当のトークンが、対象のユーザーの認証においてのみ使用されることを担保するためのもの。なお、「jti」のパラメーターで指定する有効期限は、「exp」のパラメーターで指定する有効期限と同じです。
シグネチャ

認証トークンが改ざんされていないことを検知するために使用するデータです。具体的には、ヘッダーとペイロードのデータを結合して変換したものに対して、認証用の秘密鍵で暗号化(署名)の処理を行ったものです。なお、暗号化前のデータの変換においては、Base64形式でエンコードの処理を行ったうえで、さらにハッシュ化が行われます。ハッシュ化のアルゴリズムとしては、HS256が使用されます。シグネチャを生成するための処理の概要は以下のとおりです。


シグネチャ = Base64によるエンコード ( HS256によるハッシュ化 ( ヘッダー + "."+ ペイロード, 秘密鍵 ) )


上記を組み合わせて、JWTにおける認証トークンが生成されます。具体的には、ヘッダー、ペイロード、シグネチャの各データを、ドット(.)で結合したものがトークンとなります。

 

トークン = ( ヘッダー + "."+ ペイロード + "."+ シグネチャ )




JWTにおける認証トークンを生成するためのプログラムのサンプル

import time import jwt from hashlib import sha256 def generate_jwt(payload, secret_key): """Generates a JWT using HS256. Args: payload: The JWT payload. secret_key: The secret key to use for signing. Returns: A string containing the JWT. """ header = { "typ": "JWT", "alg": "HS256" } encoded_jwt = jwt.encode(payload, secret_key, algorithm="HS256") return encoded_jwt # Example usage: payload = { "jti" : sha256(str(time.time_ns()).encode('utf-8')).hexdigest(), "exp" : str(time.time_ns() + 300000), "nbf" : str(time.time_ns()), "email" : "demo@zylker.com" } secret_key = "SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" jwtToken = generate_jwt(payload, secret_key) print(jwtToken)

Zoho DeskのヘルプセンターにおけるJWTの設定 

Zoho Deskのヘルプセンターでは、JWTを用いた認証を有効にすることが可能です。設定においては、ログインやログアウトの処理を行う際に使用するURL(認証を行う外部サービスのURL)などを指定します。主な設定項目とその概要は以下のとおりです。 

 

  • 外部ログインURL:認証用の基本設定です。Zoho DeskのヘルプセンターからJWTを通じた認証を行う際に、どのURLに移動するかを指定します。具体的には、認証を行う外部サービスのURLを指定します。ヘルプセンターにおいてユーザーがサインイン(ログイン)しようとした際に、このURLに移動して認証を行います。

  • 外部ログアウトURL:Zoho Deskのヘルプセンターからサインアウト(ログアウト)する際に、どのURLに移動するかを指定します。ユーザーがヘルプセンター利用を終了する際に、適切にサインアウトを完了させるために必要な情報です。具体的には、認証を行う外部サービスのURLを指定します。ヘルプセンターにおいてユーザーがサインアウトしようとした際に、このURLに移動してサインアウトを行います。

  • 秘密鍵:JWTを通じた認証において使用する秘密鍵を指定します。Zoho Deskのヘルプセンターと認証用サービスの間でユーザー情報をやりとりする際に、この秘密鍵を用いて認証用データ(トークン)を暗号化(署名)します。これにより、認証用データが改ざんされているかどうかを検知できるようになります。

  • 認証トークンの送信先URL:認証トークンの生成が完了した後にトークンを送信する宛先のURLを表します。このURLでは、トークンを受け取って、認証結果を検証する処理が行われます。なお、Zoho Deskのヘルプセンターの認証においては、トークンの検証処理はZohoの認証サービス(Zoho IAM)で行われます。このため、このURLには、Zoho DeskではなくZoho IAMのURLが設定されます。トークンは実際には、Zoho IAMにおける検証用URLの末尾にパラメーターとして追加されて読み込まれます。なお、一連の流れの中では、トークンに加えて、認証完了後に最終的に表示するURLの情報もパラメーターとしてやりとりされます。Zoho Desk側から認証を行う外部サービス(IdP、IDプロバイダー)に対しては、「serviceurl」という名前のパラメーターが送信されます。外部サービスからZoho Deskに対しては「return_to」という名前のパラメーターが送信されますが、この2つの値は同じものになります。これらのパラメーターにより、最終的に表示するURLの情報がサービス間でやりとりされます。認証の処理がすべて完了すると、このパラメーターで指定されているURLのページ(例:ヘルプセンターのホーム画面)が表示されます。これにより、認証が完了した後に、ヘルプセンターの利用をスムーズに開始することが可能になります。 

 

メモ 

  • 秘密鍵および認証トークンの送信先URLは、外部ログインURLと外部ログアウトURLを入力すると、自動的に設定されます。
  • 認証用の設定を削除して再設定した場合、新しい秘密鍵が生成されます。
  • 認証完了後に表示するURLは、「return_to」というパラメーターによって決まります。このパラメーターの値には、もともとはZoho Desk側から「serviceurl」という名前のパラメーターで送信されたものが反映されます。処理の流れと設定手順は以下のとおりです。
    • ユーザーがZoho Deskのヘルプセンターから外部サービス(IdP、IDプロバイダー)に移動して認証を行う際、Zoho Deskから外部サービスに対しては、「serviceurl」という名前のパラメーターが送信されます。このパラメーターは、ログイン用のURLの末尾に追加されて読み込まれます。たとえば、認証を行う外部サービスにおけるログインURLが「http://zylkerinc」である場合、実際にログインを行うページのURLは以下のように表示されます。この例では「serviceurl」パラメーターに、認証完了後に表示するURLとしてヘルプセンターのホーム画面のURL(https://zylker.helpcenter.zohodesk.com/portal/home)が指定されています。
      http://zylkerinc/?serviceurl=https://zylker.helpcenter.zohodesk.com%2Fportal%2Fhome


    • 認証を行う外部サービス(IdP、IDプロバイダー)では、「serviceurl」の値が取得され、「return_to」という名前のパラメーターに反映されます。認証処理が完了すると、このパラメーターがZoho側に送信されます。なお、このパラメーターは、外部サービスでの認証結果を表す認証トークンと一緒に送信されますが、送信先はZohoの認証サービスであるZoho IAMです。これは、最終的にZoho Deskのヘルプセンターのページを表示する前に、Zoho IAMにおいて認証トークンの検証処理が行わるためです。たとえば、認証トークンの送信先URLが「https://accounts.zohoportal.com/accounts/p/1034/signin/jwt/auth」(Zoho IAMにおいて認証トークンを検証するためのURL)だとします。

      ヘルプセンターへのサインイン時に外部サービスにおいて認証が完了すると、このURLに対して認証トークンおよび「return_to」のパラメーターが送信されます。その後、このURLで認証トークンの検証が完了すると、「return_to」で指定したURL(https://zylker.helpcenter.zohodesk.com/portal/en/home)が表示されます。
      https://accounts.zohoportal.com/accounts/p/1034/signin/jwt/auth?return_to=https://zylker.helpcenter.zohodesk.com/portal/en/home&jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjYTJhMWMxNmM5Yjc2ZjQ.


Zoho DeskのヘルプセンターでJWTを用いた認証を設定するには


  1. 画面右上の(設定)アイコンをクリックし、[経路][ヘルプセンター]の順に移動します。
  2. 対象のヘルプセンターを選択します。
  3. 画面左側のメニューから、[ユーザー認証]をクリックします。
  4. [JWT]タブに移動します。
  5. [外部ログインURL][外部ログアウトURL]を入力します。
  6. URLを入力すると、秘密鍵と認証トークンの送信先URLが自動的に設定されます。


  7. [保存する]をクリックします。

JWTを用いた認証用の設定の削除   

管理者は、必要に応じて、JWTを用いた認証用の設定を削除できます。なお、削除後は、ユーザーがZoho Deskのヘルプセンターにサインインするには、ユーザー登録を行う必要があります(外部サービスを通じたサインインはできなくなります)。また、ヘルプセンターの利用者の状況に応じて、削除後の利用方法が以下のようになります。

 

  • JWTによる認証(外部サービスを通じた認証)を有効にする前に、ヘルプセンターの利用者がヘルプセンターのアカウントでパスワードをすでに設定していた場合、該当のアカウント情報を用いてヘルプセンターにサインインできます。
  • JWTによる認証(外部サービスを通じた認証)を有効にした後に、ヘルプセンターの利用者がヘルプセンターでユーザー登録を行っていた場合、該当の利用者は次回のサインイン時にパスワードをリセットする必要があります。 

 

JWTによる認証の設定を削除するには


  1. 画面右上の(設定)アイコンをクリックし、[経路][ヘルプセンター]の順に移動します
  2. 対象のヘルプセンターを選択します。
  3. 画面左側のメニューから、[ユーザー認証]をクリックします。
  4. [JWT]のページに移動し、[削除する]をクリックします。
  5. [続ける]をクリックして処理を確定します。