JP2020030759A - 権限委譲システム、情報処理装置およびその制御方法、並びにプログラム。 - Google Patents
権限委譲システム、情報処理装置およびその制御方法、並びにプログラム。 Download PDFInfo
- Publication number
- JP2020030759A JP2020030759A JP2018157512A JP2018157512A JP2020030759A JP 2020030759 A JP2020030759 A JP 2020030759A JP 2018157512 A JP2018157512 A JP 2018157512A JP 2018157512 A JP2018157512 A JP 2018157512A JP 2020030759 A JP2020030759 A JP 2020030759A
- Authority
- JP
- Japan
- Prior art keywords
- access token
- client
- key information
- jws
- verification
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
【課題】認可サーバが署名付きアクセストークンをクライアントに発行した後に、そのアクセストークンの署名に用いた暗号鍵を削除した場合、リソースサーバにおいては該当する公開鍵による検証は無効となってしまう。リソースサーバで署名付きアクセストークンの検証が行えるようにする。【解決手段】署名付きアクセストークンに基づきサービスを提供するリソースサーバ204は、署名を行う際に用いられる鍵情報が無効になったことを受け付けた際に、無効となった鍵情報を管理する管理手段と、クライアントから署名付きアクセストークンを用いてサービスの要求を受け付けた際に、管理手段にて管理する鍵情報に基づいて、クライアントから受け付けた署名付きアクセストークンが有効か否かを検証する検証手段と、検証手段による検証の結果に基づいて、クライアントからの要求に対する応答を行う処理手段を備える。【選択図】図6
Description
本発明は、権限委譲システム、情報処理装置およびその制御方法、並びにプログラムに関する。
近年、ネットワーク上のWebサービスでは利用者がWebサービスの利用を認められているかどうかの認証・認可が行われている。また、Webサービスの多様化に伴って、複数のWebサービスが互いに連携を行い、サービス間で信頼関係を構築し、ユーザの同意のもとにセキュアに最低限必要なユーザの権限を委譲するシステムが必要とされている。そのシステムを構築するフレームワークの仕様の1つとして、OAuth2.0が公開されている。OAuth2.0では、Webサービスを提供するリソースサーバと、認証・認可を行う認可サーバが別々のサーバとして構成され、認可サーバとリソースサーバが互いに認証・認可情報を授受することで連携し、権限の委譲を可能としている。この認証・認可情報の授受にはアクセストークンが用いられることが一般的である。
トークンの譲渡を受けたシステムがトークンを使用する時点においても確実にトークンの検証をすることができる権限委譲システムについては、例えば、特許文献1のような方法がある。
しかしながら、認可サーバでアクセストークンの署名に用いられる秘密鍵・公開鍵のペアを削除し、リソースサーバで公開鍵を削除しても、削除した鍵で発行済みのアクセストークンは無効にすることはできない。そのため、発行済みのアクセストークンを持つクライアントがリソースサーバにアクセスしても、リソース取得エラーとなりリソースを取得することができない。さらに、リソースサーバは署名検証に失敗するため、アクセストークンが不正なトークンだと判断し、リソースを要求したクライアントを不正なクライアントと判断してしまう。例えば、認可サーバが署名付きアクセストークンをクライアントに発行した後に、そのアクセストークンの署名に用いた暗号鍵を削除した場合、その情報の通知によりリソースサーバにおいては該当する公開鍵による検証は無効となる。よって、リソースサーバでは署名付きアクセストークンの検証を行っても失敗し、リソースを取得する事ができない。
本発明では、認可サーバで暗号鍵が削除された場合においても、安全性を損なわずに署名付きアクセストークンの検証を行い、クライアントがリソースの取得を可能とすることを目的とする。
上記課題を解決するために本願発明は以下の構成を有する。すなわち、署名付きアクセストークンを発行する認可サーバと、前記署名付きアクセストークンに基づきサービスを提供するリソースサーバを含む権限委譲システムであって、前記リソースサーバは、署名付きアクセストークンの署名を行う際に用いられる鍵情報が無効になったことを前記認可サーバから受け付けた際に、当該無効となった鍵情報を管理する第1の管理手段と、クライアントから署名付きアクセストークンを用いてサービスの要求を受け付けた際に、前記第1の管理手段にて管理する鍵情報に基づいて、前記クライアントから受け付けた署名付きアクセストークンが有効か否かを検証する検証手段と、前記検証手段による検証の結果に基づいて、前記クライアントからの要求に対する応答を行う処理手段とを有する。
本発明により、安全性を損なうことなく、認可サーバにおいて暗号鍵が削除された場合においても署名付きアクセストークンの検証が正しく行え、クライアントがリソースを取得することが可能となる。
以下、本発明を実施するための形態について図面を用いて説明する。
[装置構成]
図1は、本発明を実施するための一実施形態に係る情報処理装置のシステム構成の例を示す図である。図1において、情報処理装置は、CPU102、メモリ103、記憶装置104、ビデオインタフェース105、Input/Output(以下I/Oと略称)インタフェース106、及び通信インタフェース107を備える。また、情報処理装置内の各構成要素は、システムバス101を介して互いに通信可能に接続されている。CPU102は、システムバス101を介して各構成要素を制御したり、データの計算や加工を行ったりする中央処理装置である。メモリ103は、データやプログラムを記憶する装置で、RAM(Random Access Memory)やROM(Read Only Memory)から構成される。記憶装置104は、記憶されたデータの書き込み/読み出しを行う。記憶装置104には、ハードディスクドライブ(HDD)111、不揮発性のデータソースとして利用されるDVD−ROMドライブ112、半導体メモリを用いたソリッドステートドライブ(SSD)113がある。図1には示されていないが、記憶装置104として、磁気テープドライブ、フロッピー(登録商標)ディスクドライブ(FDD)、CD−ROMドライブ、CD/DVD−RAMドライブ、USBフラッシュドライブなども使用されることがある。
図1は、本発明を実施するための一実施形態に係る情報処理装置のシステム構成の例を示す図である。図1において、情報処理装置は、CPU102、メモリ103、記憶装置104、ビデオインタフェース105、Input/Output(以下I/Oと略称)インタフェース106、及び通信インタフェース107を備える。また、情報処理装置内の各構成要素は、システムバス101を介して互いに通信可能に接続されている。CPU102は、システムバス101を介して各構成要素を制御したり、データの計算や加工を行ったりする中央処理装置である。メモリ103は、データやプログラムを記憶する装置で、RAM(Random Access Memory)やROM(Read Only Memory)から構成される。記憶装置104は、記憶されたデータの書き込み/読み出しを行う。記憶装置104には、ハードディスクドライブ(HDD)111、不揮発性のデータソースとして利用されるDVD−ROMドライブ112、半導体メモリを用いたソリッドステートドライブ(SSD)113がある。図1には示されていないが、記憶装置104として、磁気テープドライブ、フロッピー(登録商標)ディスクドライブ(FDD)、CD−ROMドライブ、CD/DVD−RAMドライブ、USBフラッシュドライブなども使用されることがある。
本実施形態に係るプログラムは、記憶装置104から読み込まれ、メモリ103に格納した上で、CPU102によって実行される。なお、本実施形態ではプログラムを記憶装置104から読み込む構成としているが、ROM(不図示)から読み込んだり、通信インタフェース107を介して外部から読み込んだりする構成としてもよい。
ビデオインタフェース105は、ディスプレイ装置114への表示出力を制御する。ディスプレイ装置114には、CRTや液晶等の方式を用いたものがある。I/Oインタフェース106には、キーボード115やポインティングデバイス116等の入力装置が接続される。操作者は、キーボード115を操作することにより情報処理装置に対する動作指令等を行う。ポインティングデバイス116は、ディスプレイ装置114上のカーソルを移動させてメニューやオブジェクトの選択や操作等を行う。また、ディスプレイ装置114には、タッチパネル等による操作の入力を行えるものもある。この場合、ディスプレイ装置114は出力装置と入力装置を兼ねることになる。
通信インタフェース107は、コンピュータネットワーク117を通して外部機器との通信を行う。接続先のネットワークには、LAN(Local Area Network)やWAN(Wide Area Network)、もしくはインターネットのような公衆回線等がある。
[ネットワーク構成]
図2は、本実施形態に係るネットワーク構成の例を示す図である。インターネット210には、コンピュータネットワーク211、212、213が接続されており、コンピュータネットワーク211には、認可サーバ201が接続されている。また、コンピュータネットワーク212にはクライアント203、コンピュータネットワーク213にはリソースサーバ204がそれぞれ接続されている。本実施形態においてリソースサーバ204は、インターネット210を跨いだコンピュータネットワーク上に接続されているが、認可サーバ201と同じLANに存在していてもよい。クライアント203は図2のようにコンピュータネットワーク212接続されている場合に限らず、コンピュータネットワーク211や213に接続されていてもよい。
図2は、本実施形態に係るネットワーク構成の例を示す図である。インターネット210には、コンピュータネットワーク211、212、213が接続されており、コンピュータネットワーク211には、認可サーバ201が接続されている。また、コンピュータネットワーク212にはクライアント203、コンピュータネットワーク213にはリソースサーバ204がそれぞれ接続されている。本実施形態においてリソースサーバ204は、インターネット210を跨いだコンピュータネットワーク上に接続されているが、認可サーバ201と同じLANに存在していてもよい。クライアント203は図2のようにコンピュータネットワーク212接続されている場合に限らず、コンピュータネットワーク211や213に接続されていてもよい。
クライアント203は認可サーバ201からアクセストークンを取得する。また、クライアント203は、取得したアクセストークンを使って、リソースサーバ204からWebサービス(以下、「サービス」と略称)の提供を受ける。なお、本実施形態において、認可サーバ201、クライアント203、及びリソースサーバ204はいずれも、図1にて示した情報処理装置の構成を有するものとする。ただし、図1の構成に限定するものではなく、ディスプレイ装置114を備えていない、他の機能を備えている等、クライアントとサーバはそれぞれ異なる構成を有してもよいし、それぞれが他の構成でもよい。また、サーバは、単体のコンピュータに限らず、ラックマウント型の複数台のコンピュータで構成されたシステムであっても構わない。
[従来のアクセストークン発行と検証の流れ]
以下、従来技術におけるアクセストークン発行と検証の処理の流れについて説明する。図3は、従来技術における署名付きアクセストークン発行と検証に関するシーケンス図である。図2で説明した認可サーバ201、クライアント203、及びリソースサーバ204間で連携が行われる。まず、リソースサーバ204は、認可サーバ201に対して後述する署名付きアクセストークンの検証に用いるための公開鍵を要求し、その応答として公開鍵を取得する(S301)。リソースサーバ204は、アクセストークンの署名を検証する署名ライブラリ(不図示)を有しており、署名ライブラリは取得した公開鍵を用いて署名の検証を行う。なお、認可サーバ201は複数の暗号鍵を保持してもよい。その場合、リソースサーバ204は認可サーバ201が保持する秘密鍵に対応するすべての公開鍵を取得してよい。S301の処理はリソースサーバ204の初回起動時等、クライアント203へのリソース提供前に一度行われればよい。
以下、従来技術におけるアクセストークン発行と検証の処理の流れについて説明する。図3は、従来技術における署名付きアクセストークン発行と検証に関するシーケンス図である。図2で説明した認可サーバ201、クライアント203、及びリソースサーバ204間で連携が行われる。まず、リソースサーバ204は、認可サーバ201に対して後述する署名付きアクセストークンの検証に用いるための公開鍵を要求し、その応答として公開鍵を取得する(S301)。リソースサーバ204は、アクセストークンの署名を検証する署名ライブラリ(不図示)を有しており、署名ライブラリは取得した公開鍵を用いて署名の検証を行う。なお、認可サーバ201は複数の暗号鍵を保持してもよい。その場合、リソースサーバ204は認可サーバ201が保持する秘密鍵に対応するすべての公開鍵を取得してよい。S301の処理はリソースサーバ204の初回起動時等、クライアント203へのリソース提供前に一度行われればよい。
クライアント203は、認可サーバ201に対して認証情報又は認可コードを渡して署名付きアクセストークンを要求し、その応答として署名付きアクセストークンを取得する(S302)。この時の要求において、認証情報又は認可コードのいずれが用いられるかは、オーナーの違いによって異なる。クライアント203が処理を実施するオーナーである場合はクライアント203自体が認証を行い、クライアント203が他のオーナーから処理を依頼される場合にはオーナーから受け取った認可コードを渡すことになる。
次に、クライアント203は、取得した署名付きアクセストークンを使ってリソースサーバ204に対してサービスの提供を要求する(S303)。リソースサーバ204は、受け取った署名を元にアクセストークンが適正か否か検証する(S304)。リソースサーバ204は、保持する署名ライブラリ(不図示)を用いて署名を検証することで、適正な認可サーバで発行されたアクセストークンであることを確認できる。そして、アクセストークンが適正であればリソースサーバ204はリソースを提供するための処理を実行し(S305)、リソースをクライアント203に返す。また、アクセストークンが適正でなければ、リソースサーバ204は処理(S305)を行わず、もしくは、エラー用の処理を行って、リソース取得エラーをクライアント203に返す。
[公開鍵の再取得の流れ]
図4は、認可サーバ201で暗号鍵を削除した場合における公開鍵の再取得に関するシーケンス図である。図2で説明した認可サーバ201、リソースサーバ204間で連携が行われる。認可サーバ201は保持している暗号鍵を削除する(S401)。これにより、以降、削除された暗号鍵を用いては署名が行われないこととなる。一方、リソースサーバ204には削除された暗号鍵に対応する公開鍵が保持されているため、公開鍵の更新を促す必要がある。そのため、認可サーバ201は、暗号鍵が更新された旨をリソースサーバ204に通知する(S402)。
図4は、認可サーバ201で暗号鍵を削除した場合における公開鍵の再取得に関するシーケンス図である。図2で説明した認可サーバ201、リソースサーバ204間で連携が行われる。認可サーバ201は保持している暗号鍵を削除する(S401)。これにより、以降、削除された暗号鍵を用いては署名が行われないこととなる。一方、リソースサーバ204には削除された暗号鍵に対応する公開鍵が保持されているため、公開鍵の更新を促す必要がある。そのため、認可サーバ201は、暗号鍵が更新された旨をリソースサーバ204に通知する(S402)。
次に、リソースサーバ204は、更新された公開鍵を認可サーバ201に要求し、取得する(S403)。以降は、リソースサーバ204は、更新された公開鍵を用いて、クライアント203から受信する署名付きアクセストークンを検証する。これにより、例えば認可サーバ201が保持している秘密鍵が流出したとしても、その鍵を削除し、リソースサーバ204が保持する公開鍵を更新すればよい。具体的には、悪意あるクライアント203が流出した鍵で署名されたアクセストークンでリソースサーバ204にアクセスしたとしても、リソースサーバ204ではそのアクセストークンの検証に必要な公開鍵は既に保持されていない。よって、リソースサーバ204側ではアクセストークンの署名検証において適正でないと判断され、その署名は無効となり、リソースの取得を防止することができる。
以上、署名付きアクセストークンの検証および暗号鍵の削除時におけるシーケンスについて説明した。しかし、認可サーバ201がアクセストークンをクライアント203に発行した後、そのアクセストークンの署名に用いた暗号鍵を削除した場合、リソースサーバ204では配布する公開鍵が更新される。その結果、そのアクセストークンの検証では適正でないと判定される。よって、クライアント203が正規の手続きを経て取得したアクセストークンを用いてリソースサーバ204にアクセスしたにも関わらず、リソースを取得する事ができないという状態が生じうる。
以下、本発明の実施形態に係る構成について説明する。
<第1の実施形態>
[アクセストークンおよびアクセストークンに紐付くユーザ情報を格納するJWS]
本実施形態においては、署名付きのアクセストークンとして、通常のアクセストークンの代わりにアクセストークン情報およびリソースオーナー情報であるアクセストークンに紐付くユーザ情報を格納するJWS(以降、「JWSアクセストークン」)を用いる。以下、本実施形態で用いるJWSアクセストークンについて詳述する。
[アクセストークンおよびアクセストークンに紐付くユーザ情報を格納するJWS]
本実施形態においては、署名付きのアクセストークンとして、通常のアクセストークンの代わりにアクセストークン情報およびリソースオーナー情報であるアクセストークンに紐付くユーザ情報を格納するJWS(以降、「JWSアクセストークン」)を用いる。以下、本実施形態で用いるJWSアクセストークンについて詳述する。
OAuth2.0で利用可能なJWS(JSON Web Signature)は、JWT(JSON Web Token)で表現されたコンテンツをデジタル署名やMACs(Message Authentication Codes)により保護して表現する手段である。また、JWTは、JSON(JavaScript Object Notation)をベースとしたデータ構造を用いたURLセーフなクレームの表現方法である。JWS、JWTについては、各々RFC(RFC7515(JWS)、RFC7519(JWT))として仕様化、公開されている。
本実施形態で使用するJWSアクセストークンに含まれるクレームは、以下である。
表1のクレーム名クラス“Registered Claim”の各クレームは、JWTのRFC7519で予め定義されたクレームで以下である。すなわち、JWTの発行者の識別子“iss”(Issuer)、JWTの主語となる主体の識別子“sub”(Subject)、JWTを利用することが想定された主体の識別子一覧“aud”(Audience)、JWTの有効期限“exp”(Expiration Time)、JWTが有効になる日時“nbf”(Not Before)、JWTのための一意な識別子“iat”(Issued At)、“jti”(JWT ID)を表す。上記“exp”、“nbf”、“iat”に指定する日時はIntDateで、1970−01−01T0:0:0Z UTCから指定されたUTCの日付/時刻まで秒の数を表わすJSON数値である。またこれらの“Registered Claim”の使用は任意である。
“Registered Claim”に関し、具体的に本実施形態においては、認可サーバ201が、“iss”として認可サーバ201のURI、“sub”としてユーザのUUID(Universally Unique Identifier)、“aud”としてリソースサーバ204のURI、“exp”として本JWT発行時から3600秒、すなわち“iat”の値+3600、“nbf”として本JWT発行時、すなわち“iat”と同じ値、“jti”として認可トークン情報の認可トークンIDを設定する。
表1のクレーム名クラス“Private Claim”の各クレームは、認可トークンスコープリスト“authz:scopes”、クライアントID“authz:client_id”、ファーストネーム“ext:fname”、ラストネーム“ext:lname”、ロケール名“ext:locale”、テナントID“ext:tenantid@recm”、電子メールアドレス“ext:email@req”、アプリケーションID“ext:appid”を表す。JWTのRFC7519によると、“Private Claim”はJWT発行者と利用者の合意のものとで使用するプライベートクレーム名クラスで、他に定義されたクレーム名と衝突のないことを前提とする。本実施形態では、“Private Claim”クラスのクレーム名に認可トークン情報(認可トークンスコープリスト“authz:scopes”、認可トークンクライアントID“authz:client_id”)と、認可トークンに紐付く属性情報(ファーストネーム“ext:fname”、ラストネーム“ext:lname”、テナントID”ext:tenantid@recm”、電子メールアドレス“ext:email@req”、アプリケーションID“ext:appid”)を持つ。表1のJWSアクセストークンに含まれるクレームの内容や、認可サーバ201による発行方法、リソースサーバ204における使用方法については後述する。
“Private Claim”に関し、具体的に本実施形態においては、認可サーバ201が、認可情報として“authz:scopes”、“authz:client_id”のクレームを設定する。すなわち、“authz:scopes”としてリソースサーバが取得を許可するリソースを表すスコープリストを、“authz:client_id”としてリソースサーバにアクセスするクライアントのIDを設定する。さらに、“authz:client_id”のトークンに紐付く属性情報として、“sub”に設定したユーザIDのユーザの情報を表すクレームを以下のように設定する。すなわち、“ext:fname”として“sub”に設定したUUIDのユーザのファーストネーム、“ext:lname”として“sub”に設定したUUIDのユーザのラストネーム、“ext:locale”として“sub”に設定したUUIDのユーザのロケール名、“ext:tenantid@recm”として“sub”に設定したUUIDのユーザが所属するテナントID、“ext:email@req”として“sub”に設定したUUIDのユーザの電子メールアドレス、“ext:appid”としてクライアントアプリケーションのIDであるアプリケーションIDを設定する。詳細は後述する。
認可サーバ201は、表1のクレームをJWTの仕様であるRFC7519によりJSONとしてエンコードする。更に、認可サーバ201は、JWSの仕様であるRFC7515のコンパクトシリアライゼーション仕様に従ってデジタル署名されたコンテンツ(表1のクレームのJSON表現、すなわちJWTペイロード)をコンパクトなURL−safe文字列として表現符号化する。本実施形態のJWSアクセストークンは、JWSコンパクトシリアライゼーション仕様に従い、エンコード済JWSヘッダー、エンコード済JWTペイロード、およびエンコード済JWS署名を、この順序でピリオド(‘.’)文字を区切り文字として連結した文字列である。
本実施形態においては、JWSヘッダーとしてJWSの署名に使われる暗号アルゴリズムを識別する“alg”(アルゴリズム)を用いる。具体的に本実施形態においては、“alg”として“RS256”(RSASSA−PKCS1_v1_5 using SHA−256)を用いる。“RS256”文字列は、“alg”の値としてIANA JSON Web Signature and Encryption Algorithms レジストリに登録されており、JSON Web Algorithms(JWA)仕様(RFC7518)のSection3.1で定義されている。
なお、本実施形態においてJWSの署名に使われる暗号アルゴリズム“RS256”で使用する秘密鍵・公開鍵の鍵ペアは、認可サーバ201が予め生成しておき、後述する暗号鍵管理テーブルで管理する。またJWSの署名を検証する公開鍵は、前述の通りJWSアクセストークンを検証するリソースサーバ204の初回起動時に取得しておく。詳細は後述する。
[ソフトウェア構成]
図5(A)は、本実施形態に係る認可サーバ201の機能(ソフトウェア構成)の例を示す。テナント管理部501、ユーザ管理部502、及びクライアント管理部503は、それぞれテナント情報の管理、ユーザ情報の管理、クライアント情報の管理を行う。JWSアクセストークン発行部504は、JWSアクセストークンの発行を行い、発行されたJWSアクセストークンの情報は発行済みJWSアクセストークン管理部505に保管される。リソースサーバ情報管理部506は、認可サーバ201と連携するリソースサーバ204に関する情報を管理する。
図5(A)は、本実施形態に係る認可サーバ201の機能(ソフトウェア構成)の例を示す。テナント管理部501、ユーザ管理部502、及びクライアント管理部503は、それぞれテナント情報の管理、ユーザ情報の管理、クライアント情報の管理を行う。JWSアクセストークン発行部504は、JWSアクセストークンの発行を行い、発行されたJWSアクセストークンの情報は発行済みJWSアクセストークン管理部505に保管される。リソースサーバ情報管理部506は、認可サーバ201と連携するリソースサーバ204に関する情報を管理する。
以下、表2〜表9を用いて、図5(A)に示した認可サーバ201の各機能ブロックが管理するデータテーブルについて詳述する。各機能ブロックは、下記の表に示されたデータテーブルに基づいてJWSアクセストークンを発行、検証する。詳細は後述する。
表2、表3は、本実施形態に係る認可サーバ201のユーザ管理部502が管理するユーザ管理テーブル(表2)、及びユーザ属性管理テーブル(表3)である。
表2のユーザ管理テーブルは、ユーザID項目、ユーザIDの内部表現であるUUID(Client ID)項目、ユーザIDに対応するパスワードを示すPassword項目、ユーザ種別を示すUser Type項目を含んで構成される。認可サーバ201は、UUID(Client ID)、Passwordの情報の組を検証し、正しければ認証情報を生成することで、各ユーザもしくはクライアントを認証する機能(不図示)を備える。
表3のユーザ属性管理テーブルは、ユーザIDの内部表現であるUUID項目、UUIDのユーザの姓を示すFirst Name項目、名を示すLast Name項目、ロケールを示すLocale項目、同ユーザの所属するテナントを示すTenant ID項目、同ユーザの電子メールアドレスを示すEmail項目、同ユーザの使用できるサービスを示すService ID項目を含んで構成される。
表4は、本実施形態に係る認可サーバ201のクライアント管理部503が管理するクライアント管理テーブル(表4)である。
表4のクライアント管理テーブルは、クライアントIDを示すClient ID項目、Client IDのクライアントのクライアント名を示すClient Name項目、OAuth2.0(RFC6749)プロトコル等で使用する同クライアントのリダイレクトURLを示すRedirect URL、同クライアントの使用できるサービスを示すService ID項目を含んで構成される。
表5は、本実施形態に係る認可サーバ201のリソースサーバ情報管理部506が管理するサービス管理テーブル(表5)である。
表5のサービス管理テーブルは、リソースサーバで提供するリソースに関するサービスを表すサービスIDを示すService ID項目、Service IDに相当するサービスをリソースとして表し、OAuth2.0プロトコルなどの認可要求のスコープに指定される内容であるScope項目、Service IDに相当するサービス(リソース)を提供するリソースサーバのURLを示すURL項目を含んで構成される。
表6〜表9は、本実施形態に係る認可サーバ201のJWSアクセストークン発行部504および発行済みJWSアクセストークン管理部505が管理、参照するトークン管理テーブル(表6)、リフレッシュトークン管理テーブル(表7)、トークン属性管理テーブル(表8)、暗号鍵管理テーブル(表9)である。
表6のトークン管理テーブルは、トークンIDを示すToken ID項目、アクセストークン、認可コードなど、トークンIDのトークンタイプを示すToken Type項目、トークンIDの有効期限を秒(sec)で示すExpiration Time項目、OAuth2.0プロトコルなどの認可要求のスコープに指定される内容であるScope項目、OAuth2.0プロトコルなどで使用するトークンIDのGrant Typeを示すGrant Type項目を含んで構成される。
表7のリフレッシュトークン管理テーブルは、OAuth2.0プロトコルなどで使用する、リフレシュトークンを管理するテーブルである。リフレッシュトークン管理テーブルは、トークンIDを示すToken ID項目、トークンIDのリフレッシュトークンのIDを示すRefresh Token Type項目、リフレッシュトークンIDの有効期限を秒で示すRefresh Token Expiration Time項目を含んで構成される。
表8のトークン属性管理テーブルは、OAuth2.0プロトコルなどで使用する、トークン属性を管理するテーブルである。トークン属性管理テーブルは、トークンIDを示すToken ID項目、トークンIDの発行要求元のクライアントIDを示すClient ID項目、トークンIDに紐付くUUIDを示すUUID項目、クライアントIDのアプリケーション(サービス管理テーブル(表5)のサービスIDのサービスを利用する)でトークンIDを用いるアプリケーションを示すApplication ID項目を含んで構成される。
表9の暗号鍵管理テーブルは、アクセストークンのデジタル署名で使用する、サービスに対して使用する暗号鍵を管理するテーブルである。暗号鍵管理テーブルは、サービスIDを示すService ID項目、サービスIDに紐づいてデジタル署名に用いられる鍵の識別子を示すKey ID項目、デジタル署名で利用されるアルゴリズムを示すAlgorithm項目、署名生成に用いる秘密鍵を示すPrivate Key項目、署名検証に用いる公開鍵を示すPublic Key項目を含んで構成される。なお、表9におけるPrivate Key項目、Public Key項目の各値は”**”により省略して記述している。
図5(B)は、本実施形態に係るリソースサーバ204の機能(ソフトウェア構成)の例を示す。リソース管理部510は、リソース情報の管理(後述するスコープとリソースの対応関係の定義を含む)を行う。JWSアクセストークン管理部511は、JWSアクセストークン情報の管理を行う。JWSアクセストークン検証部512は、JWSアクセストークンの検証を行う。削除鍵情報管理部513は、削除された鍵情報の管理を行う。認可サーバ情報管理部514は、リソースサーバ204と連携する認可サーバ201に関する情報を管理する。
表10は、リソースサーバ204の削除鍵情報管理部513が管理・参照する削除鍵管理テーブル(表10)である。
表10の削除鍵情報管理テーブルは、JWSアクセストークンの検証で用いる、認可サーバ201側で削除された鍵を管理するテーブルである。削除鍵管理テーブルは、認可サーバ201で削除された秘密鍵を示すKey ID項目を含んで構成される。秘密鍵の削除が行われていない場合は削除鍵管理テーブルで管理する項目はないため、テーブルの中身は空となっている。詳細は後述する。
[本実施形態に係るJWSアクセストークン発行と検証の流れ]
図6は、本実施形態に係るJWSアクセストークン発行と検証に関するシーケンス図である。認可サーバ201、クライアント203、及びリソースサーバ204間で連携が行われる。
図6は、本実施形態に係るJWSアクセストークン発行と検証に関するシーケンス図である。認可サーバ201、クライアント203、及びリソースサーバ204間で連携が行われる。
本実施形態では、OAuth2.0における認可コードグラントのフローを用いたJWSアクセストークンの発行と検証について述べる。JWSアクセストークンの発行と検証については、認可コードグラントだけでなく、OAuth2.0にあるクライアントクレデンシャルグラント、リソースオーナーパスワードクレデンシャルグラント、インプリシットグラント等を用いてもよい。これらについては公知の方法を利用可能であるとし、ここでは説明を省略する。
OAuth2.0プロトコルにおいては、アクセストークン発行などのフローを開始する前に、クライアント203を認可サーバ201に登録する。クライアント203を認可サーバ201に登録する方法は、通常、エンドユーザとの対話を伴うHTML登録フォーム(不図示)を持つことになる。本実施形態においては、予め必要なクライアント203は登録されているものとする。クライアント203の登録の際、認可サーバ201はクライアント203に対してクライアントID、パスワードを発行し、表2のユーザ管理テーブルのUUID(Client ID)項目に発行したクライアントを、Password項目に発行したパスワードを登録する。そして、後述するアクセストークンに付与するScopeに関連付けられたサービスIDの値を、表4のクライアント管理テーブルに登録するものとする。
さらには、OAuth2.0の認可コードの取得フローに従い、認可サーバ201は、ユーザ管理テーブル(表2)のユーザIDに相当するリソースオーナーの認証後、トークン管理テーブル(表6)と、トークン属性管理テーブル(表8)のように認可コードを登録し、クライアント203が認可コードを取得する。
リソースサーバ204は、前述のように初回起動時に認可サーバ201から公開鍵情報を取得しておく。このとき取得する情報としては、表9で示した暗号鍵管理テーブルからKey ID項目、およびPublic Key項目の値を抽出したものである。なお、公開鍵情報の取得はリソースサーバ204の起動時以外でもよく、アクセストークンの検証を行う前に取得できていればよいので、取得するタイミングについては特に限定されるものではない。以下、図6におけるフローを詳述する。
クライアント203が認可サーバ201に、OAuth2.0プロトコルの仕様に従い認可コード、各種クレデンシャル(認証情報又は認可コード)を示してアクセストークンの発行を要求する(S601)。認可サーバ201は、要求に応じてJWSアクセストークンを発行する(S602)。ここで、図7のフローチャートを利用して本実施形態における認可サーバ201によるJWSアクセストークンの発行について説明する。本処理は、例えば、認可サーバ201のCPUが記憶装置に保持されたプログラムを読み出して実行することにより実現される。
S701にて、認可サーバ201のJWSアクセストークン発行部504は、前記JWSアクセストークン発行の要求を受信する。具体的には、本実施形態の場合、以下のようなJWSアクセストークン発行要求を受信する。ここでの発行要求は一例であり、これに限定するものではない。
POST /token HTTP/1.1
Host: auth.server.example.com
Authorization: Basic NTIzZWUyMGM5ZjM5QDI0NDliYXh0OnBhc3N3b3Jk
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=AipziOBeZoQYbJS6WxSbKB
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fredirect
Host: auth.server.example.com
Authorization: Basic NTIzZWUyMGM5ZjM5QDI0NDliYXh0OnBhc3N3b3Jk
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&code=AipziOBeZoQYbJS6WxSbKB
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fredirect
S702にて、JWSアクセストークン発行部504は、上記要求のAuthorizationヘッダー部にBase64符号化されて含まれるClient IDおよびパスワードを用いて認証処理を行う。本実施形態の場合、Authorizationヘッダーに含まれるBase64符号を復号化し、表2のユーザ管理テーブルのUUID(Client ID)およびPasswordの組と比較して認証する。また、OAuth2.0の仕様に従い、JWSアクセストークン発行部504は、表8のトークン属性テーブルを参照し、JWSアクセストークン要求に含まれる認可コード項目(code=AipziOBeZoQYbJS6WxSbKB)がToken ID項目に存在するか否かを確認する。さらに、JWSアクセストークン発行部504は、Token IDに対応するClient ID項目を確認し、該Client ID項目に対応するリダイレクトIDを表4のクライアント管理テーブルから検索して、JWSアクセストークン要求に含まれるリダイレクトURI項目(redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fredirect)に一致するか否かを確認する。
S703にて、JWSアクセストークン発行部504は、S702の認証の成否を判定する。認証に失敗したと判定された場合は(S703にてNO)S710へ進み、認証に成功したと判定された場合は(S703にてYES)S704へ進む。
S704にて、JWSアクセストークン発行部504は、権限検証を行う。すなわち、JWSアクセストークン発行部504は、表4のクライアント管理テーブルのClient IDに対応するService IDを参照し、さらに表5のサービス管理テーブルのService IDに対応するScopeが存在するか否かを確認する。
S705にて、JWSアクセストークン発行部504は、S704におけるScopeの存在確認により、JWSアクセストークン発行要求の権限検証の成否を判定する。Client IDに対応するScopeが存在しないと判定された場合(S705にてNO)S710へ進み、権限検証に成功、すなわちClient IDに対応するScopeが存在したと判定された場合(S705にてYES)S706へ進む。
S706にて、JWSアクセストークン発行部504は、クライアント認証、権限検証したクライアントの情報に従ってJWSアクセストークンのペイロードとなるJWTを生成する。本実施形態のJWTは、表1のJWSトークンに含まれるクレームに示したようなクレームを持つ。具体的には、JWSアクセストークン発行部504は、JWSアクセストークン発行の要求情報、表3〜表5、表9を参照し、表1に示した構成のクレームを以下のように設定する。
まず、JWSアクセストークン発行部504は、JWSヘッダーとして以下を設定する。S704で参照したService IDに対応する表9のKey ID項目、Algorithm項目から“kid”:“2”、“alg”:“RS256”が設定される。そして、“typ”:“JWT”が設定される。
次に、JWSアクセストークン発行部504は、JWTペイロードとして以下を設定する。JWTの発行者の識別子“iss”(Issuer)として、認可サーバ201のURI“https://auth.example.com”が設定される。JWTの主語となる主体の識別子“sub”(Subject)として、JWSアクセストークン発行要求に含まれる認可コードに対応するリソースオーナーのIDである表1のUUID“1ce42f74−1225−4cbb−b23f−f525dabc3cfd”が設定される。JWT を利用することが想定された主体の識別子一覧“aud”(Audience)として、S704で検証したScopeに相当するリソースサーバのURLとして、表5のURL項目の“https://store.srv.example.com”が設定される。JWTの有効期限“exp”(Expiration Time)として、本JWT発行時から3600秒、すなわち本実施形態の場合、“iat”の値+3600である“1472713413”が設定される。“nbf”として本JWT発行時、すなわち“iat”と同じ値“1472709813”が設定される。本JWSアクセストークンの発行時に、認可トークンを表6のトークン管理テーブルに示すように発行し、“jti”として該認可トークンの認可トークンID“b2652f6d75b14aa49adfe89b8808b337ef276e8d1363400d98fab100c7463df0”が設定される。
次に、JWSアクセストークン発行部504は、JWTのプライベートクレームを生成する。具体的には、認可トークンスコープリスト“authz:scopes”、認可トークンクライアントID“authz:client_id”、ファーストネーム“ext:fname”、ラストネーム“ext:lname”、ロケール名“ext:locale”、テナントID“ext:tenantid@recm”、電子メールアドレス“ext:email@req”、アプリケーションID“ext:appid”が設定されるが、表3〜表5を参照し、JWSアクセストークン発行要求のクライアントID、リソースオーナーIDであるユーザID(UUID)に紐付く値が設定される。
すなわち、“authz:scopes”として表6のScopes項目である“[client.StoreService]”、“authz:client_id”として表4のClient ID項目の“523ee20c9f39@2449baxt”、ファーストネーム“ext:fname”として表3の“John”、ラストネーム“ext:lname”として表3の“Doe”、ロケール名“ext:locale”として表3の“en_US.utf−8”、テナントID“ext:tenantid@recm”として表3の“170BA”、電子メールアドレス“ext:email@req”として表3の“john.ddo@example.com”、アプリケーションID“ext:appid”として表8のApplication ID項目である“42c5a9626098459e96d4bacd73c29823392a76a02cc94d36985b7dc0d790b9a4”が設定される。
まとめると、S706、S707により、下に示す表11のようにJWTペイロードが指定される。
次に、S708にて、JWSアクセストークン発行部504は、S704で参照したService IDに対応する表9のAlgorithm項目、Private Key項目からデジタル署名に用いるアルゴリズムと秘密鍵を決定する。そして、JWSの仕様であるRFC7515のコンパクトシリアライゼーション仕様に従い、決定したアルゴリズムと秘密鍵を用いてデジタル署名を行う。さらに、JWSアクセストークン発行部504は、デジタル署名されたJWTペイロードをコンパクトなURL−safe文字列として表現符号化(BASE64 URLエンコード)する。
次に、S709にて、JWSアクセストークン発行部504は、エンコード済のJWSヘッダー、エンコード済のJWTペイロード、およびエンコード済のJWS署名を、この順序でピリオド(‘.’)文字を区切り文字として連結した文字列にして、以下のようなJWSアクセストークンを生成し、JWSトークンとして発行する。以下のJWSアクセストークンは一部を省略している。そして、本処理フローを終了する。
eyJraWQiOiJrMSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOi(中略)BiOWE0In0.O4TpYbDB(中略)JbPyYk9YhA
S710にて、JWSアクセストークン発行部504は、クライアントにエラーメッセージを返す。例えば、S704にて権限検証が失敗した場合には、JWSアクセストークン発行部504は、権限検証に失敗したとしてエラーメッセージをクライアントに返す。そして、本処理フローを終了する。
ここで図6のシーケンス図に戻る。ここでは、正常にJWSアクセストークンが生成された場合について説明する。
認可サーバ201のJWSアクセストークン発行部504は、上記のようにJWSアクセストークンを生成すると、以下のようにクライアント203に該JWSアクセストークンを返却する(S603)。
HTTP/1.0 200 OK
Content-Type: application/json
Date: Thu, 15 Sep 2016 07:30:40 GMT
{
“jws_token”:“eyJraWQiOiJrMSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOi(中略)BiOWE0In0.O4TpYbDB(中略)JbPyYk9YhA”
}
Content-Type: application/json
Date: Thu, 15 Sep 2016 07:30:40 GMT
{
“jws_token”:“eyJraWQiOiJrMSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOi(中略)BiOWE0In0.O4TpYbDB(中略)JbPyYk9YhA”
}
S604〜S607は、認可サーバ201にて、暗号鍵の削除が行われる場合の処理である。
認可サーバ201において暗号鍵の削除が指示されると、JWSアクセストークン発行部504は、暗号鍵管理テーブルから該当する暗号鍵情報を削除する(S604)。例えば、表9におけるKey ID項目の値が“2”の暗号鍵を削除した場合、暗号鍵管理テーブルは下に示す表12のようになる。このとき、サービスID“StoreService”に対する暗号鍵情報が消失してしまうので、JWSアクセストークン発行部504は新しい暗号鍵を生成し、その情報を暗号鍵管理テーブルに登録する。
さらに、認可サーバ201は、暗号鍵が更新された旨をリソースサーバ204に通知する(S605)。
リソースサーバ204は、認可サーバ201からの通知を受け取り、これに伴って、公開鍵情報を認可サーバ201に要求し、その応答として更新後の公開鍵情報を取得する(S606)。なお、本実施形態では認可サーバ201の通知によりリソースサーバ204が公開鍵情報を要求する構成であるが、認可サーバ201が通知を行うとともに公開鍵情報を配布する構成でもよく、特に限定されるものではない。
次に、リソースサーバ204の削除鍵情報管理部513は、予め保持していた公開鍵情報と新しく取得した公開鍵情報とを比較し、消失した“kid”の項目を検出することで、削除鍵管理テーブルを更新する(S607)。具体的には、表10で示したように、暗号鍵の削除前では削除鍵管理テーブルは空であった。予め保持していた公開鍵情報に含まれる“kid”は“1,2”であったが、新しく取得した公開鍵情報に含まれる“kid”は“1,3”であるため、“kid”が“2”の暗号鍵が削除されたことが検出される。その結果を受けて更新された削除鍵管理テーブルは下に示す表13のようになる。つまり、削除された暗号鍵を示す”2”が削除鍵管理テーブルに追加され、管理される。
削除鍵管理テーブルの生成後は、リソースサーバ204は、予め保持していた公開鍵情報を破棄する。以後、リソースサーバ204は、公開鍵情報を取得する毎に、既に保持していた公開鍵情報と新しく取得した公開鍵情報とを比較し、削除鍵管理テーブルを更新していく。なお、本実施形態では、リソースサーバ204側で新旧の公開鍵情報を比較することで削除鍵管理テーブルを更新していく構成としたが、認可サーバ201が該情報を配布し、リソースサーバ204にて保持する構成でもよく、特に限定されるものではない。
次にクライアント203は、認可サーバ201から先に取得したJWSアクセストークンを使ってリソースサーバ204に対してサービスの提供を要求する。具体的には、クライアント203はリソース要求のREST API呼び出しなどの際に、HTTPのAuthenticationヘッダーにJWSアクセストークンを以下のようにセットして利用する(S608)。
Authorization: Bearer eyJraWQiOiJrMSIsImFsZyI6IlJTMjU2In0.eyJpc3MiOi(中略)BiOWE0In0.O4TpYbDB(中略)JbPyYk9YhA
リソース要求API呼び出しを受けたリソースサーバ204は、クライアント203から取得したJWSアクセストークンを検証する(S609)。
JWSアクセストークンの検証の後、リソースサーバ204のリソース管理部510は必要に応じてリソースの取得処理を行う(S610)。そして、リソース管理部510は、リソースの取得処理結果もしくはエラー情報をクライアント203に返す(S611)。
図8は、本発明の一実施形態におけるリソースサーバ204のJWSアクセストークン検証、応答処理について示したフローチャートである。図6のS608〜S611の処理に対応する。本処理は、例えば、リソースサーバ204のCPUが記憶装置に保持されたプログラムを読み出して実行することにより実現される。
S801にて、リソースサーバ204は、クライアント203のリソース要求REST API呼び出し時、上記のようにHTTP AuthorizationヘッダーとしてJWSアクセストークンを受信する。
S802にて、JWSアクセストークンを受信したリソースサーバ204のJWSアクセストークン検証部512は、JWSアクセストークンを検証する。JWSアクセストークンの検証はRFC7515のA.2.2仕様に従う。すなわち、JWSアクセストークン検証部512は、該JWSアクセストークンを、区切り文字であるピリオド(‘.’)文字を基準として、エンコード済JWSヘッダー、エンコード済JWTペイロード、およびエンコード済JWS署名に分割する。さらにJWSアクセストークン検証部512は、分割したJWSヘッダー、JWTペイロード、JWS署名を復号化(BASE64 URLデコード)する。そして、JWSアクセストークン検証部512は、JWSヘッダーに示されたアルゴリズム(“alg”:“RS256”)により、前述した署名ライブラリを用いて保持する公開鍵情報を基にJWS署名を検証する。
S803にて、JWSアクセストークン検証部512は、S802のJWS署名検証の成否を判定する。該JWS署名検証に成功したと判定した場合(S803にてYES)、S804へ進み、次のクレーム情報の検証ステップに進む。該JWS署名検証に失敗したと判定した場合(S803にてNO)S808へ進む。
S804にて、JWSアクセストークン管理部511は、復号化、署名検証済みのJWTペイロードのJWTを参照してクレーム情報の取得を行う。ここで取得されるクレーム情報は、図7のS706、S707で設定した表11の情報である。次に、JWSアクセストークン検証部512は、JWSアクセストークンに含まれるクレーム情報のうち、表11のRegistered Claimクラスのクレームの検証を行う。
S805にて、JWSアクセストークン管理部511は、Registered Claim検証の成否を判定する。本実施形態においては、トークンが消費される場所を表す“aud”、有効期限を表す“exp”、“nbf”について検証が行われる。具体的には、“aud”に含まれる文字列のうち、リソースサーバ204のURLが含まれない場合は、JWSアクセストークン検証部512は、受信したJWSアクセストークンが不正であると判定する。この場合、S811へ進む。“exp”が有効期限を過ぎている、もしくは“nbf”が現在時刻以降である場合、JWSアクセストークン検証部512は、受信したJWSアクセストークンの有効期限が切れていると判定する。この場合、S807へ進む。上述のいずれでもない場合は、JWSアクセストークン検証部512は、有効なトークンであると判定する。この場合、S806へ進む。
S806にて、リソース管理部510はクライアント203からのリソース要求API呼び出しに応じて処理結果(要求リソース)を返す。そして、本処理フローを終了する。
S807にて、リソース管理部510は、クライアント203に有効期限切れエラーを返却する。有効期限切れエラーは、アクセストークンの有効期限が切れていることを示す。そして、本処理フローを終了する。
S811にて、リソース管理部510は、クライアント203にトークン不正エラーを返却する。トークン不正エラーは、アクセストークンが不正なものであることを示す。そして、本処理フローを終了する。
S803で該JWS署名検証に失敗したと判定した場合、S808にて、JWSアクセストークン管理部511は、削除鍵管理テーブルを参照してJWSアクセストークンの鍵情報について検証を行う。JWSアクセストークン管理部511は、S804と同様に、復号化、署名検証済みのJWSヘッダーを参照してkidを取得する。JWSアクセストークン検証部512は、取得したkidと削除鍵情報管理部513が所持する削除鍵管理テーブルから、同じkidが含まれるか検証する。
S809にて、JWSアクセストークン管理部511は、削除鍵検証の成否を判定する。該削除鍵検証に成功したと判定した場合、すなわち、同じkidが含まれると判定された場合(S809にてYES)、S807へ進む。該削除鍵検証に失敗したと判定した場合(S809にてNO)S810へ進む。削除鍵検証が失敗する場合とは、JWSヘッダーを参照して取得したkidが削除鍵管理テーブルに含まれていない場合である。これは、本実施形態においては、JWSアクセストークンに設定されたkidをリソースサーバ204が認可サーバ201から取得できていない場合や、そのkidが認可サーバ201にて発行されていないものである場合などが挙げられる。
S810にて、リソース管理部510は、クライアント203にリソース取得エラーを返却する。リソース取得エラーは、リソースの取得が失敗した旨を示す。そして、本処理フローを終了する。
[JWSアクセストークンの再取得]
次に、図7のS807で、リソースサーバ204から有効期限エラーを受けたクライアント203がJWSアクセストークンを再度取得(再発行)する方法について説明する。有効期限エラーを受けた場合は、JWSアクセストークンにおいて、トークンの有効期限が切れている、もしくは削除した鍵で署名されたアクセストークンであることがエラーの原因である。よって、クライアント203は認可サーバ201にアクセストークンの発行を再度要求し、新しいJWSアクセストークンを使用してリソースサーバ204にリソースの要求を行う。つまりは、図6のJWSアクセストークンの要求およびリソースの要求の処理シーケンスが再び実行される。
次に、図7のS807で、リソースサーバ204から有効期限エラーを受けたクライアント203がJWSアクセストークンを再度取得(再発行)する方法について説明する。有効期限エラーを受けた場合は、JWSアクセストークンにおいて、トークンの有効期限が切れている、もしくは削除した鍵で署名されたアクセストークンであることがエラーの原因である。よって、クライアント203は認可サーバ201にアクセストークンの発行を再度要求し、新しいJWSアクセストークンを使用してリソースサーバ204にリソースの要求を行う。つまりは、図6のJWSアクセストークンの要求およびリソースの要求の処理シーケンスが再び実行される。
このとき、認可サーバ201のJWSアクセストークン発行部504では、クライアント203からの要求に応じて、“kid”が“3”の暗号鍵を用いてJWSアクセストークンの署名および発行を行う(S602)。前述のJWSアクセストークンによりリソースを要求されたリソースサーバ204のJWSアクセストークン検証部512は、新しく取得した公開鍵情報に“kid”が“3”の公開鍵が含まれているので、検証が成功する(S609)。その結果、クライアント203は要求したリソースを取得することができる。
また、本実施形態において、S809で同じkidが含まれないと判断された場合にクライアント203にリソース取得エラーを返却する構成(S809、S810)としている。この構成により、クライアントはS805の判定に基づいてエラーを受けた場合とS809の判定に基づいてエラーを受けた場合とで処理を変える必要がない。つまり、従来技術において実装されている権限委譲システムに本発明を適用する際に、クライアントの実装を変更する必要がない。
以上のように、本実施形態においてJWSアクセストークンの検証を行うことで、以下の効果が期待できる。すなわち、安全性を損なうことなく、認可サーバにおいて暗号鍵が削除された場合においても署名付きアクセストークンの検証が正しく行え、クライアントがリソースを取得することが可能となる。
<第2の実施形態>
第1の実施形態では、削除鍵情報を管理しJWSアクセストークンのkidを検証することで、認可サーバ201で暗号鍵が削除された場合においてもクライアント203はリソースを取得できる。ここで、認可サーバ201で暗号鍵が削除されるたびにリソースサーバ204が保持する削除鍵管理テーブルに新たなレコードが追加されていく。そのため、処理が繰り返されることで、削除鍵情報管理部513ではテーブルから該当する鍵情報を探索する際の処理コストの増加や、テーブルを格納するための記憶部(例えば、内部メモリ)の圧迫が発生しうる。
第1の実施形態では、削除鍵情報を管理しJWSアクセストークンのkidを検証することで、認可サーバ201で暗号鍵が削除された場合においてもクライアント203はリソースを取得できる。ここで、認可サーバ201で暗号鍵が削除されるたびにリソースサーバ204が保持する削除鍵管理テーブルに新たなレコードが追加されていく。そのため、処理が繰り返されることで、削除鍵情報管理部513ではテーブルから該当する鍵情報を探索する際の処理コストの増加や、テーブルを格納するための記憶部(例えば、内部メモリ)の圧迫が発生しうる。
そこで、本願発明の第2の実施形態として、リソースサーバ204における削除鍵情報管理部513の処理コストやメモリ管理コストを低減するための実施形態について説明する。
表14は、リソースサーバ204の削除鍵情報管理部513が管理・参照する削除鍵管理テーブルである。
表14の削除鍵管理テーブルは、JWSアクセストークンの検証で用いる削除鍵管理テーブル(表10)に、該削除鍵レコードを削除する時間を示すDelete Time項目を加えたものである。Delete Timeには、JWTペイロードにおける“Registered Claim”クラスの“exp”クレームと同じく、IntDateで1970−01−01T0:0:0Z UTCから指定されたUTCの日付/時刻まで秒の数を表わすJSON数値が格納される。
本実施形態に係るJWSアクセストークン発行と検証に関するシーケンスは、第1の実施形態にて図6を用いて述べた構成と同じである。ただし、S607における削除鍵管理テーブルの作成処理において、Key IDが追加されたレコードに対し、Delete Timeは空にしてテーブルを作成する。その他の処理内容については同じであるので、ここでの説明は省略する。
[JWSアクセストークン検証および応答処理]
図9は、本実施形態に係るリソースサーバ204のJWSアクセストークン検証、応答処理について示したフローチャートである。なお、図8と同様の処理については同じ符号を付与しており、説明は省略する。本処理は、例えば、リソースサーバ204のCPUが記憶装置に保持されたプログラムを読み出して実行することにより実現される。
図9は、本実施形態に係るリソースサーバ204のJWSアクセストークン検証、応答処理について示したフローチャートである。なお、図8と同様の処理については同じ符号を付与しており、説明は省略する。本処理は、例えば、リソースサーバ204のCPUが記憶装置に保持されたプログラムを読み出して実行することにより実現される。
S802でのJWS署名検証に失敗したと判定した場合(S803にてNO)S901へ進む。S901にて、削除鍵情報管理部513は、削除鍵管理テーブルの各レコードのDelete Timeと現在時刻をIntDateで表した数値を比較し、現在時刻の方が大きいレコードを削除する。その後、S808に処理を進める。なお、本実施形態ではS901の処理をJWSアクセストークンの署名検証時に合わせて行う構成としたが、例えば別スレッドで定期的に削除鍵管理テーブルを監視し、その都度本処理を行う構成でもよく、特に限定されるものではない。
S808での削除鍵検証に成功したと判定された場合、すなわち、同じkidが含まれると判定された場合(S809にてYES)S902へ進む。S902にて、削除鍵情報管理部513は、削除鍵管理テーブルの該レコードのDelete Timeが空か否かを判定する。空であると判定された場合(S902にてYES)S903へ進み、空でないと判定された場合(S902にてNO)S904へ進む。
S903にて、削除鍵情報管理部513は、該レコードのDelete Timeに所定の時刻を格納する。所定の時刻とは、現在時刻に例えば3600(秒)を加えた値である。権限委譲システムにおける設計思想等から所定の時刻は予め決定しておく必要がある。この例の場合、JWSアクセストークンによるアクセスから3600秒が経過した後には、S901の処理によって削除鍵テーブルの該レコードは削除されることとなる。また、所定の時刻にJWSアクセストークンの有効期限を設定するのもよい。すなわち、復号化及び署名検証済みのJWTペイロードの“exp”クレームが使用される。こうすることで、JWSアクセストークンの有効期限においてのみ削除鍵の検証が有効となるので、過不足なく削除鍵管理テーブルを管理でき、より望ましい。その後、S807へ処理を進める。
S904にて、削除鍵情報管理部513は、該レコードのDelete Timeの値と、前述の所定の時刻とを比較し、所定の時刻の方が大きいか否かを判定する。所定の時刻の方が大きいと判定された場合(S904にてYES)S905へ進み、そうでないと判定された場合は(S904にてNO)S807へ進む。
S905にて、削除鍵情報管理部513は、該レコードのDelete Timeを所定の時刻に更新する。これにより、有効期限がより後のJWSアクセストークンの検証も有効となる。その後、S807へ処理を進める。
以上、本実施形態において削除鍵管理テーブルの各レコードを所定の時刻をもって削除することで、削除鍵情報管理部513の処理コストやメモリ管理コストを低減することができる。
<第3の実施形態>
第2の実施形態では、削除鍵管理テーブルの各レコードを所定の時刻をもって削除することで、削除鍵情報管理部513処理コストやメモリ管理コストを低減することができる。第1および第2の実施形態では、JWSアクセストークンの有効期限”exp”は認可サーバ201が現在時刻に3600(秒)を加えた値を設定する構成で説明した。この“exp”であるが、その他にもクライアント203がJWSアクセストークン要求時に指定することもできる。また、リソースサーバ204が指定することもできる。そのため、同じ暗号鍵で署名されるアクセストークンであっても、個体ごとに有効期限“exp”は異なる。よって、第2の実施形態において削除鍵管理テーブルのレコードを削除したとしても、その後に該暗号鍵で署名されたアクセストークンがリソース要求を行った場合、削除鍵検証で否と判定され、そのアクセストークンはリソースを取得することができない。
第2の実施形態では、削除鍵管理テーブルの各レコードを所定の時刻をもって削除することで、削除鍵情報管理部513処理コストやメモリ管理コストを低減することができる。第1および第2の実施形態では、JWSアクセストークンの有効期限”exp”は認可サーバ201が現在時刻に3600(秒)を加えた値を設定する構成で説明した。この“exp”であるが、その他にもクライアント203がJWSアクセストークン要求時に指定することもできる。また、リソースサーバ204が指定することもできる。そのため、同じ暗号鍵で署名されるアクセストークンであっても、個体ごとに有効期限“exp”は異なる。よって、第2の実施形態において削除鍵管理テーブルのレコードを削除したとしても、その後に該暗号鍵で署名されたアクセストークンがリソース要求を行った場合、削除鍵検証で否と判定され、そのアクセストークンはリソースを取得することができない。
例えば、あるクライアントAが取得したJWSアクセストークンの有効期限“exp”が“1496279400”(=2017−06−01 T10:10:00Z UTC)であったとする。一方、別のクライアントBで取得したJWSアクセストークンの有効期限”exp”が“1496286000”(=2017−06−01 T12:00:00Z UTC)であったとする。それぞれ同じ暗号鍵で署名されており、認可サーバ201において同時刻(=2017−06−01 T10:00:00Z UTC)において発行されたものである。この後、“2017−06−01 T10:02:00Z UTC”に認可サーバ201において該暗号鍵が削除されたとする。
“2017−06−01 T10:05:00Z UTC”にクライアントAがリソースサーバ204にリソースを要求した場合、第2の実施形態で説明したように、クライアントAはリソースを取得できる。そのため、削除鍵管理テーブルにおける該暗号鍵のレコードはクライアントAの“exp”である2017−06−01 T12:10:00Z UTCの時刻に削除される。その後、“2017−06−01 T11:00:00Z UTC”にクライアントBがリソースサーバ204にリソースを同様に要求したとする。この場合、JWSアクセストークンは有効期限内であるにも関わらず、削除鍵管理テーブルには該暗号鍵のレコードがないため、クライアントBにはリソース取得エラーが返却されリソースを取得することができない。
そこで、削除された暗号鍵で署名されたアクセストークンが複数ある場合においても、過不足なく削除鍵情報を管理するための実施形態について説明する。
表15は、認可サーバ201の発行済みJWSアクセストークン管理部505が管理、参照する発行済みトークン管理テーブルである。
表15の発行済みトークン管理テーブルは、トークンの署名に使用した秘密鍵を特定するKey ID項目とトークンの有効期限を示すExpiration Time項目を含んで構成される。
Key IDにはJWSアクセストークン発行部504が発行したトークンにおけるJWSヘッダーの“kid”が、Expiration Timeには同じく発行したトークンにおけるJWTペイロードの“exp”クレームが格納されている。発行済みJWSアクセストークン管理部505は、図6のS602でJWSアクセストークンを発行した際に、本テーブルに該当する情報を追加していく。さらには、発行済みJWSアクセストークン管理部505は、JWSアクセストークンを発行するたびに、そのトークンの”kid”と同じレコードのExpiration Timeを取得する。そして、発行済みJWSアクセストークン管理部505は、発行したトークンの“exp”と比較して“exp”の方が大きければExpiration Timeをその値に更新する。
[削除鍵情報の問い合わせ処理]
図10は、本実施形態に係る削除鍵情報の問い合わせ処理について示したシーケンス図である。認可サーバ201、リソースサーバ204間で連携が行われる。第2の実施形態で説明した、削除鍵管理情報を削除する処理(図9のS901)が本実施形態では異なる。なお、リソースサーバ204のJWSアクセストークン検証・応答のフローチャートは図9と同様であり、同様の処理についての説明は省略する。
図10は、本実施形態に係る削除鍵情報の問い合わせ処理について示したシーケンス図である。認可サーバ201、リソースサーバ204間で連携が行われる。第2の実施形態で説明した、削除鍵管理情報を削除する処理(図9のS901)が本実施形態では異なる。なお、リソースサーバ204のJWSアクセストークン検証・応答のフローチャートは図9と同様であり、同様の処理についての説明は省略する。
S802でのJWS署名検証に失敗したと判定された場合(S803にてNO)、リソースサーバ204の削除鍵情報管理部513は、削除鍵管理テーブルの各レコードのDelete Timeと現在時刻をIntDateで表した数値を比較し、現在時刻の方が大きいレコードのkidを取得する。そして、削除鍵情報管理部513は、認可サーバ201へ取得したkidを示し、削除の可否の問い合わせを行う(S1001)。
認可サーバ201の発行済みJWSアクセストークン管理部505は、表15の発行済みトークン管理テーブルを参照し、受信したkidとテーブルのKey IDが一致するレコードのExpiration Timeを取得する。そして、発行済みJWSアクセストークン管理部505は、取得したExpiration Timeと現在時刻を比較し、どちらが大きいかを判定する。現在時刻より大きいExpiration Timeがない場合は、発行済みJWSアクセストークン管理部505は、削除許可をリソースサーバ204に返す。一方、現在時刻より大きいExpiration Timeがある場合は、発行済みJWSアクセストークン管理部505は、削除不許可をリソースサーバ204に返す(S1002)。また、該当するkidが表15にない場合は、発行済みJWSアクセストークン管理部505は、削除許可をリソースサーバ204に返す。例えば、受信kidが“2”である場合、表15を参照することでExpiration Timeとして“1496286000”が取得される。現在時刻が“2017−06−01 T11:00:00Z UTC(=1496282400)”である場合、Expiration Timeは現在時刻より大きいので、リソースサーバ204には削除不許可が返却される。
リソースサーバ204は削除許可情報を受信し、その情報に従い削除鍵情報管理部513は削除鍵管理テーブルを更新する(S1003)。つまり、リソースサーバ204は、削除許可を受信した場合は該レコードを削除し、削除不許可を受信した場合は該レコードを削除しない。そして、図9のS808へと処理を進める。
以上、本実施形態では、削除鍵管理テーブルの各レコードを削除する場合に認可サーバ201に問い合わせを行い、認可サーバ201が発行したアクセストークンの有効期限をもって該削除鍵情報の削除判定を行う。これにより、削除された暗号鍵で署名されたアクセストークンが複数ある場合においても、過不足なく削除鍵情報を管理することができる。
<その他の実施形態>
本発明は上述の実施形態の1以上の機能を実現するプログラムをネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
本発明は上述の実施形態の1以上の機能を実現するプログラムをネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
201…認可サーバ、203…クライアント、204…リソースサーバ、504…JWSアクセストークン発行部、505…発行済みJWSアクセストークン管理部、511…JWSアクセストークン管理部、512…JWSアクセストークン検証部、513…削除鍵情報管理部
Claims (13)
- 署名付きアクセストークンを発行する認可サーバと、前記署名付きアクセストークンに基づきサービスを提供するリソースサーバを含む権限委譲システムであって、
前記リソースサーバは、
署名付きアクセストークンの署名を行う際に用いられる鍵情報が無効になったことを前記認可サーバから受け付けた際に、当該無効となった鍵情報を管理する第1の管理手段と、
クライアントから署名付きアクセストークンを用いてサービスの要求を受け付けた際に、前記第1の管理手段にて管理する鍵情報に基づいて、前記クライアントから受け付けた署名付きアクセストークンが有効か否かを検証する検証手段と、
前記検証手段による検証の結果に基づいて、前記クライアントからの要求に対する応答を行う処理手段と
を有することを特徴とする権限委譲システム。 - 前記第1の管理手段は、前記無効となった鍵情報を用いて署名が行われた署名付きアクセストークンを用いてサービスの要求を受け付けてから所定の時間が経過した後に、当該無効となった鍵情報を削除することを特徴とする請求項1に記載の権限委譲システム。
- 前記所定の時間は、前記署名付きアクセストークンに対して設定された有効期限に基づいて決定されることを特徴とする請求項2に記載の権限委譲システム。
- 前記第1の管理手段は、前記無効となった鍵情報を用いて署名が行われた署名付きアクセストークンを用いてサービスの要求を受け付けた場合、前記認可サーバに対し当該無効となった鍵情報の削除の可否を問い合わせ、当該問い合わせの結果に応じて、当該鍵情報を削除するか否かを決定することを特徴とする請求項1に記載の権限委譲システム。
- 前記リソースサーバは、
前記認可サーバから鍵情報を取得する取得手段と、
前記取得手段にて取得した鍵情報を管理する第2の管理手段と
を更に有し、
前記第2の管理手段は、管理している鍵情報が無効になったことを受け付けた際に、当該鍵情報を削除し、前記第1の管理手段は、前記第2の管理手段にて削除された鍵情報の管理を開始することを特徴とする請求項1乃至4のいずれか一項に記載の権限委譲システム。 - 前記検証手段による検証において、前記署名付きアクセストークンが前記第1の管理手段にて管理されている鍵情報を用いて署名されていると判定された場合、前記処理手段は、前記クライアントに対し、有効期限切れを示すエラーを返すことを特徴とする請求項1乃至5のいずれか一項に記載の権限委譲システム。
- 前記クライアントは、前記要求に対する応答として有効期限切れのエラーを受け付けた場合、前記認可サーバに対して、署名付きアクセストークンの再発行を要求することを特徴とする請求項6に記載の権限委譲システム。
- 前記認可サーバは、
前記クライアントからの要求に応じて、署名付きアクセストークンの発行を行う発行手段と、
前記発行手段にて発行した署名付きアクセストークンの情報を管理する第3の管理手段と
を有することを特徴とする請求項1乃至7のいずれか一項に記載の権限委譲システム。 - 前記認可サーバは、前記第3の管理手段が管理する鍵情報を前記リソースサーバに提供する提供手段を更に有し、
前記提供手段は、前記第3の管理手段が管理している鍵情報が更新された場合に提供を行うことを特徴とする請求項8に記載の権限委譲システム。 - 前記発行手段は、前記クライアントから署名付きアクセストークンの再発行の要求を受け付けた場合、前記第3の管理手段にて管理している鍵情報を用いて署名付きアクセストークンを再発行することを特徴とする請求項8または9に記載の権限委譲システム。
- 署名付きアクセストークンに基づきサービスを提供する情報処理装置であって、
署名付きアクセストークンの署名を行う際に用いられる鍵情報が無効になったことを受け付けた際に、当該無効となった鍵情報を管理する管理手段と、
クライアントから署名付きアクセストークンを用いてサービスの要求を受け付けた際に、前記管理手段にて管理する鍵情報に基づいて、前記クライアントから受け付けた署名付きアクセストークンが有効か否かを検証する検証手段と、
前記検証手段による検証の結果に基づいて、前記クライアントからの要求に対する応答を行う処理手段と
を有することを特徴とする情報処理装置。 - 署名付きアクセストークンに基づきサービスを提供する情報処理装置の制御方法であって、
署名付きアクセストークンの署名を行う際に用いられる鍵情報が無効になったことを受け付けた際に、当該無効となった鍵情報を記憶部にて管理する管理工程と、
クライアントから署名付きアクセストークンを用いてサービスの要求を受け付けた際に、前記記憶部にて管理する鍵情報に基づいて、前記クライアントから受け付けた署名付きアクセストークンが有効か否かを検証する検証工程と、
前記検証工程による検証の結果に基づいて、前記クライアントからの要求に対する応答を行う処理工程と
を有することを特徴とする情報処理装置の制御方法。 - コンピュータを、
署名付きアクセストークンの署名を行う際に用いられる鍵情報が無効になったことを受け付けた際に、当該無効となった鍵情報を管理する管理手段、
クライアントから署名付きアクセストークンを用いてサービスの要求を受け付けた際に、前記管理手段にて管理する鍵情報に基づいて、前記クライアントから受け付けた署名付きアクセストークンが有効か否かを検証する検証手段、
前記検証手段による検証の結果に基づいて、前記クライアントからの要求に対する応答を行う処理手段
として機能させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018157512A JP2020030759A (ja) | 2018-08-24 | 2018-08-24 | 権限委譲システム、情報処理装置およびその制御方法、並びにプログラム。 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2018157512A JP2020030759A (ja) | 2018-08-24 | 2018-08-24 | 権限委譲システム、情報処理装置およびその制御方法、並びにプログラム。 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2020030759A true JP2020030759A (ja) | 2020-02-27 |
Family
ID=69622615
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2018157512A Pending JP2020030759A (ja) | 2018-08-24 | 2018-08-24 | 権限委譲システム、情報処理装置およびその制御方法、並びにプログラム。 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2020030759A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699404A (zh) * | 2020-12-29 | 2021-04-23 | 平安普惠企业管理有限公司 | 一种校验权限的方法、装置、设备及存储介质 |
CN113329003A (zh) * | 2021-05-24 | 2021-08-31 | 广州大学 | 一种物联网的访问控制方法、用户设备以及系统 |
CN115766213A (zh) * | 2022-11-15 | 2023-03-07 | 四川启睿克科技有限公司 | jwt失效管理方法 |
-
2018
- 2018-08-24 JP JP2018157512A patent/JP2020030759A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112699404A (zh) * | 2020-12-29 | 2021-04-23 | 平安普惠企业管理有限公司 | 一种校验权限的方法、装置、设备及存储介质 |
CN113329003A (zh) * | 2021-05-24 | 2021-08-31 | 广州大学 | 一种物联网的访问控制方法、用户设备以及系统 |
CN115766213A (zh) * | 2022-11-15 | 2023-03-07 | 四川启睿克科技有限公司 | jwt失效管理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11122028B2 (en) | Control method for authentication/authorization server, resource server, and authentication/authorization system | |
JP7228977B2 (ja) | 情報処理装置及び認可システムと検証方法 | |
KR102390108B1 (ko) | 정보 처리 시스템 및 제어 방법 | |
JP6166596B2 (ja) | 認可サーバーシステムおよびその制御方法、並びにプログラム | |
US9571494B2 (en) | Authorization server and client apparatus, server cooperative system, and token management method | |
JP6066647B2 (ja) | デバイス装置、その制御方法、およびそのプログラム | |
US9154504B2 (en) | Device apparatus, control method, and relating storage medium | |
EP3462701B1 (en) | Device, control method of the same, and program | |
JP6675163B2 (ja) | 権限委譲システム、認可サーバの制御方法、認可サーバおよびプログラム | |
EP4002758A1 (en) | Security token validation | |
KR20190024817A (ko) | 권한 위양 시스템, 그 제어 방법 및 클라이언트 | |
JP6736305B2 (ja) | 情報処理システム、情報処理装置、サーバ装置、情報処理システムの制御方法、及びプログラム | |
US11444954B2 (en) | Authentication/authorization server, client, service providing system, access management method, and medium | |
JPWO2016092630A1 (ja) | 情報処理装置、情報処理装置の制御方法、情報処理システム、およびコンピュータプログラム | |
JP6118479B1 (ja) | サーバ装置、サービス方法、プログラム、ならびに、非一時的なコンピュータ読取可能な情報記録媒体 | |
US11063922B2 (en) | Virtual content repository | |
JP2007257426A (ja) | 認証強度の異なるサーバに対応した連携型認証方法及びシステム | |
JP2018092446A (ja) | 認証認可システム及び情報処理装置と認証認可方法とプログラム | |
JP2020030759A (ja) | 権限委譲システム、情報処理装置およびその制御方法、並びにプログラム。 | |
EP3570517B1 (en) | Authentication technique making use of emergency credential | |
JP2022528711A (ja) | 分散台帳に関連付けられた宛先アドレッシング | |
JP6983685B2 (ja) | 情報処理システム、クライアント装置、認証認可サーバー、制御方法とそのプログラム | |
JP2018093407A (ja) | システム、リソースサーバ、システムの制御方法およびプログラム | |
JP2019036347A (ja) | 情報処理装置、情報処理装置の制御方法、情報処理システム、およびコンピュータプログラム | |
Corella et al. | An example of a derived credentials architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20210103 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210113 |