JP2018093407A - システム、リソースサーバ、システムの制御方法およびプログラム - Google Patents

システム、リソースサーバ、システムの制御方法およびプログラム Download PDF

Info

Publication number
JP2018093407A
JP2018093407A JP2016236299A JP2016236299A JP2018093407A JP 2018093407 A JP2018093407 A JP 2018093407A JP 2016236299 A JP2016236299 A JP 2016236299A JP 2016236299 A JP2016236299 A JP 2016236299A JP 2018093407 A JP2018093407 A JP 2018093407A
Authority
JP
Japan
Prior art keywords
token
authorization
jws
information
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
Application number
JP2016236299A
Other languages
English (en)
Inventor
小林 真琴
Makoto Kobayashi
真琴 小林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP2016236299A priority Critical patent/JP2018093407A/ja
Publication of JP2018093407A publication Critical patent/JP2018093407A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】署名付き認可トークンによる認証において必要な項目のみ認可サーバへの問い合わせを行い、認可サーバのトークン検証の負荷、リソースサーバのパフォーマンス低下を低減するシステムを提供する。【解決手段】ネットワークを介してサービスを提供するリソースサーバ202と、認可サーバ201とを含むシステムであって、認可サーバ201は、付加情報が付加された、署名付きの認可情報を発行するJWSトークン発行部604を有し、リソースサーバ202は、署名付きの認可情報の署名を検証するJWSトークン検証部612と、署名付きの認可情報に含まれる各項目が認可サーバ201に問い合わせるべき項目であるかを示す付加情報に基づいて、認可サーバ201に問い合わせが必要な項目の検証要求を行うJWSトークン管理部611と、を有する。【選択図】図5

Description

本発明は、システム、リソースサーバ、システムの制御方法およびプログラムに関する。
ほとんどのネットワーク上のWebサービスでは、利用者がWebサービスの利用を認められているかどうかの認証・認可が行われる。そして、Webサービスが多様化し、複数のWebサービスが互いに連携を行うようになるにつれ、Webサービスを提供するリソースサーバと認証・認可を行う認可サーバが別々のサーバとして構成されるようになってきた。このような構成では、認可サーバとリソースサーバが互いに認証・認可情報を授受することで連携している。認可サーバは認可情報を含む認可トークンを発行し、クライアントは認可トークンを利用してリソースサーバからサービスの提供を受ける。このような認可情報の授受に関する仕様の一つとしてOAuth等が公開されている。
従来のOAuth仕様の実装においては、クライアントからリソースサーバが受け取った全ての認可トークンについて、基本的に、リソースサーバが認可サーバ(トークンのステートを持つサーバー)に対して、該トークンの検証問い合わせを行うことになる。また一般に、トークンに紐付くユーザ情報についても同様に、リソースサーバがトークンに紐付くユーザ情報を所有する認可サーバに情報問い合わせを行うことになる。このように、クライアント、リソースサーバの台数が増えるに従い、リソースサーバから認可サーバ(発行済みトークンのトークン情報及びトークンに紐付くユーザ情報を持つサーバ)へのトークン検証、情報問い合わせが増え、認可サーバの負荷が高くなる。またクライアントから受信した全トークンについて毎回認可サーバに検証、情報問い合わせをおこなうことにより、リソースサーバのパフォーマンスが低下することになる。
ところで、認可サーバの負荷やリソースサーバのパフォーマンス低下を抑制するために、リソースサーバがクライアントから受け取った認可トークンをリソースサーバ自身で検証できるようにすることが考えられる。この場合、認可サーバで発行するトークンに、予め認可情報(トークンID、スコープ、有効期限など)およびトークンに紐付く情報(ユーザID、クライアントID、ユーザ名、メールアドレスなど)を付与する。リソースサーバが行っていたトークンの検証は、認可サーバがトークンに署名を付与してリソースサーバで行えるようにすればよい。特許文献1は、譲渡元ユーザの識別情報がグッドユーザリストに含まれている場合に、トークンの譲渡を受けたシステムが譲渡トークンに含まれる情報により譲渡トークンの正当性を検証することができる権限管理システムを開示している。
特開2007−149010号公報
しかし、認可サーバで発行する署名付きトークンの認可情報、該トークンに紐付く情報については、認可サーバにおいてトークンの有効期限内に変更になる可能性がある。その際のリソースサーバでの署名付きトークン検証においては、リソースサーバは、発行済みの署名付きトークンに付与された情報の確からしさは検証できるが、それら情報について、認可サーバで現在管理されている情報を確認することができない。今現在の署名付きトークンに付与された情報を確認するためには、リソースサーバがクライアントから受け取った署名付きトークンを使用する際に、毎回認可サーバに検証、情報問い合わせを行うことになる。しかしながら、これは従来の認可サーバのトークン検証と同様にクライアント、リソースサーバの台数が増えるに従い、負荷が高くなる。また毎回認可サーバに検証、情報問い合わせをおこなうことにより、リソースサーバのパフォーマンスが低下することになる。
本発明は、署名付き認可トークンによる認証において必要な項目のみ認可サーバへの問い合わせを行い、認可サーバのトークン検証の負荷、リソースサーバのパフォーマンス低下を低減するシステムを提供することを目的とする。
上記課題を解決するために、本発明のシステムは、ネットワークを介してサービスを提供するサービス提供装置と、認可サーバとを含むシステムであって、前記認可サーバは、付加情報が付加された、署名付きの認可情報を発行する発行手段を有し、前記サービス提供装置は、前記署名付きの認可情報の前記署名を検証する署名検証手段と、前記署名付きの認可情報に含まれる各項目が前記認可サーバに問い合わせるべき項目であるかを示す前記付加情報に基づいて、前記認可サーバに問い合わせが必要な項目の検証要求を行う検証要求手段と、を有する。
本発明によれば、署名付き認可トークンによる認証において必要な項目のみ認可サーバへの問い合わせを行い、認可サーバのトークン検証の負荷、リソースサーバのパフォーマンス低下を低減するシステムを提供することができる。
情報処理装置の構成内容を示す図である。 ネットワーク構成図である。 認可トークン発行および検証のシーケンス図である。 署名付き認可トークン発行および検証のシーケンス図である。 認可サーバおよびリソースサーバのシステムの機能ブロック図である。 JWSトークンの発行および検証のシーケンス図である。 認可サーバのトークン発行処理のフローチャートである。 JWSトークンの発行要求の一例を示す図である。 JWSトークン発行処理のフローチャートである。 JWSトークンの一例を示す図である。 認可サーバから返却されるJWSトークンの一例を示す図である。 サービス提供要求の一例を示す図である。 JWSトークン検証処理のフローチャートである。 JWSトークン検証処理のフローチャートである。 認可サーバへの情報問い合わせのフローチャートである。 リソースサーバのクレーム確認処理のフローチャートである。 JWSトークンの発行および検証のシーケンス図である。 第2実施形態における情報取得要求および返却の一例を示す図である。
図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にはリソースサーバ202がそれぞれ接続されている。なお、本実施形態において、認可サーバ201、クライアント203、リソースサーバ202は、それぞれインターネット210を跨いだ個別のネットワーク上に構成されているが、同一のネットワーク上に構成されていてもよい。
認可サーバ201は、権限移譲を実現するための認可サーバである。リソースサーバ202は、認可サーバ201と連携してユーザに各々のサービスを提供するサービス提供装置である。クライアント203はパソコン、スマートフォンなどのユーザが操作する情報機器であり、Webブラウザーやアプリケーションがインストールされている。クライアント203は、認可サーバ201から認可トークンを取得する。ユーザは取得した認可トークンを使って、Webブラウザーやアプリケーションを介してリソースサーバ202のWebサービス(以下、サービスと略称)の提供を受ける。なお、本実施形態において、認可サーバ201、クライアント203、リソースサーバ202はいずれも、図1にて示した情報処理装置の構成を有するものとする。ただし、図1の構成に限定するものではなく、表示装置114を備えていなかたり、他の機能を備えていていたりしても構わない。また、サーバは、単体のコンピュータに限らず、ラックマウント型の複数台のコンピュータで構成されたシステムであっても構わない。
図3および図4を参照して、従来の権限委譲システムにおける認可トークンの発行と検証の流れについて説明する。
図3は、認可トークン発行と検証に関するシーケンス図である。まず、クライアント203は、認可サーバ201に対して認証情報あるいは認可コードを渡し、認可トークンを要求する(S301)。認証情報か認可コードかは、オーナーの違いによって異なる。クライアント203が処理を実施するオーナーである場合はクライアント203自体が認証を行って認証情報を渡し、クライアント203が他のオーナーから処理を依頼される場合にはオーナーから受け取った認可コードを渡す。認可サーバ201は、認可トークンを発行し、クライアント203に返す(S302)。クライアント203は、認可サーバ201から認可トークンを取得する。
次に、クライアント203は、取得した認可トークンを使ってリソースサーバ202に対してサービスの提供を要求する(S303)。リソースサーバ202は、認可サーバ201に対し、受け取った認可トークンが適正かどうかを検証するよう要求する(S304)。認可サーバ201は、リソースサーバ202から受け取った認可トークンの検証を行い(S305)、検証結果をリソースサーバ202に返す(S306)。認可トークンが適正であれば、リソースサーバ202は、サービスを提供するための処理を実行し(S307)、処理結果をクライアント203に返す(S308)。なお、認可トークンが不適正であった場合は、リソースサーバ202は処理を行わず、エラーをクライアント203に返す。
図4は、署名付き認可トークンの発行と検証に関するシーケンス図である。まず、クライアント203は、認可サーバ201に対して認証情報あるいは認可コードを渡して署名付き認可トークンを要求する(S401)。認可サーバ201は、署名付き認可トークンを発行し、クライアント203に返す(S402)。クライアント203は、認可サーバ201から署名付き認可トークンを取得する。
次に、クライアント203は、取得した署名付き認可トークンを使ってリソースサーバ202に対してサービスの提供を要求する(S403)。リソースサーバ202は、受け取った署名付き認可トークンの署名を元に、認可トークンが適正かどうかを検証する(S404)。リソースサーバ202は、認可サーバ201の署名を認証する証明書を保持しており、証明書を利用して署名を確認することで適正な認可サーバで発行された認可トークンであるか否かを検証できる。そして、認可トークンが適正であれば、リソースサーバ202はサービスを提供するための処理を実行し(S405)、処理結果をクライアント203に返す(S406)。
認可サーバ201とリソースサーバ202はネットワーク上遠い位置に存在している。そのため、図3の303で示すように認可サーバ201へ認可トークンの検証を依頼すると処理パフォーマンスが低下してしまう。しかし、図4の403のようにリソースサーバ202内で検証を行うことで処理パフォーマンスの低下を防ぐことができる。なお、403の検証で認可トークンが不適正であった場合は、リソースサーバ202は処理を行わず、エラーをクライアント203に返す。なお、認可トークンが不適正であった場合は、リソースサーバ202は処理を行わず、エラーをクライアント203に返す。
S404の署名付き認可トークンの検証においては、リソースサーバ202内で署名付き認可トークンの検証を実施する。しかし、署名付き認可トークンの有効期限内に認可サーバ201内で署名付き認可トークンに紐付く諸情報が変更された場合、リソースサーバ202は情報の変更を検知する手段がない。例えば、電子メールアドレスのような情報が変更された場合、リソースサーバで電子メールアドレスを使用すると誤った情報に基づいてメールを送信してしまう。このような署名付き認可トークンに紐付く諸情報の変更に起因する誤作動を抑制するためには、リソースサーバ202で署名付き認可トークンに含まれる情報を利用する度に認可サーバ201に情報の問い合わせを行う必要がある。しかし、署名付き認可トークンに含まれる情報を利用する度に認可サーバ201に情報の問い合わせを行うと、署名付き認可トークンをリソースサーバ202内で検証することで抑制していた処理パフォーマンスの低下を打ち消してしまう恐れがある。
署名付き認可トークンに付与された情報には、リソースサーバ202がトークン有効期限内に必ず確認したい情報と、必ずしも確認の必要のない情報が混在している。これらを認可サーバ201のポリシーに従いリソースサーバ202で適切に確認し、確認の必要性に応じて認可サーバ問い合わせすることにより、認可サーバのトークン検証、情報取得の負荷を低減し、リソースサーバのパフォーマンスを上げることが望ましい。
(第1実施形態)
本実施形態においては、署名付きの認可トークンとして、通常の認可トークンの代わりに、認可トークン情報およびリソースオーナー情報である認可トークンに紐付くユーザ情報を格納するJWS(以降JWSトークンとする)を用いる。以下では、この署名付きの認可トークンをJWSトークンと記す。以下、本実施形態で用いるJWSトークンについて詳述する。
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))として仕様化、公開されている。
表1は、本実施形態で使用するJWSトークンに含まれるクレーム(すなわち、項目)を表している。
Figure 2018093407
表1のクレーム名クラス“Registered Claim”の各クレームは、JWTのRFC7519で予め定義されたクレームである。すなわち、"iss"(Issuer)はJWTの発行者の識別子を、"sub"(Subject)はJWTの主語となる主体の識別子を、"aud"(Audience)はJWTを利用することが想定された主体の識別子一覧を表す。また、"exp"(Expiration Time)はJWTの有効期限を、"nbf"(Not Before)はJWTが有効になる日時を、"iat"(Issued At)、"jti"(JWT ID)は、JWTのための一意な識別子を表す。上記"exp"、"nbf"、"iat"に指定する日時はIntDateで、1970-01-01T0:0:0Z UTCから指定されたUTCの日付/時刻まで秒の数を表わすJSON数値である。またこれらの”Registered Claim”の使用は任意である。
本実施形態においては、JWSトークンを発行する認可サーバが、"iss"として認可サーバのURIを設定する。また、"sub"としてユーザのUUID(Universally Unique Identifier)を設定する。さらに、"aud"としてリソースサーバのURIを設定する。そして、"exp"として本JWT発行時から3600秒、すなわち"iat"の値+3600を、"nbf"として本JWT発行時、すなわち"iat"と同じ値を設定する。また、本実施形態においては、"jti"として認可トークン情報の認可トークンIDを設定し、"jti"を必須のクレームとする。また、本実施形態においては、認可トークンIDをRegistered Claimクラスの"jti"クレームに持っている。しかし、他クラス(例えば、Public Claimクラス、Private Claimクラス)のクレームに、新規クレーム定義、あるいは既存クレームに割り当て、などして持っても良い。
次に、表1のクレーム名クラス“Private Claim”の各クレームについて説明する。
“authz:scopes”は認可トークンスコープリストを、“authz:client_id”はクライアントIDを、“ext:fname”はファーストネームを、“ext:lname”はラストネームを表す。また、“ext:locale”はローカル名を、“ext:tenantid@recm”はテナントIDを、“ext:email@req”は電子メールアドレスを、“ext:appid”はアプリケーションIDを表す。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”が含まれている。
署名付きトークンの認可情報、該トークンに紐付く情報には、トークンの有効期限内であれば必ずしも認可サーバに問い合わせて確認する必要のない情報がある。例えば、トークンに紐付く情報としてユーザ名、ロケール、クライアントにアクセスするアプリケーション名、認可スコープなどがある。これらは、認可サーバやリソースサーバの提供するサービスによるが、一般的にトークン有効期限内に変更される可能性が低く、また例え変更されても残りのトークン有効期限内にリソース提供や情報取得を行っても事実上問題ない場合が多く存在する。一方、例えば電子メールアドレスなど、リソースサーバで該情報を使用する際、トークン有効期限内であっても必ず確認の必要のある情報もある。またそもそも、クライアントからのリソース要求の際にリソースサーバで利用しない情報である場合には、トークン有効期限内に認可サーバへの情報問い合わせの必要はない。また、情報問い合わせの必要な情報かどうかを、リソースサーバだけで判断できない場合もある。例えば、認可サーバ機能により認可スコープが頻繁に変更されるようなサービスの場合、認可スコープは必ず確認の必要がある情報となる。このように、署名付きトークンに付与された情報には、リソースサーバがトークン有効期限内に必ず確認したい情報と、必ずしも確認の必要のない情報が混在している。さらにトークンに紐付く情報を管理している認可サーバのポリシーに従い必ず毎回確認させたい情報もある。
そこで、JWSトークン発行部604は、トークンに付加情報を付加する。本実施形態では、“Private Claim”クラスのクレーム名に、必要に応じて付加情報として、タグ文字列であるアノテーション“@req”、“@recm”などを付けることが可能である。例えば、“ext:tenantid@recm”、“ext:email@req”のように、アノテーションを付加する。以下では、アノテーション“@req”、 “@recm”などの付加情報を、クレーム情報アノテーションと呼ぶ。上記“@req”アノテーションは、リソースサーバなどで該アノテーションの付いたクレームを参照する場合、認可サーバへの確認を要求する“required”アノテーションである。また上記“@recm”アノテーションは、リソースサーバなどで本アノテーションの付いたクレームを参照する場合、認可サーバへの確認を推奨する“recommended”アノテーションである。上記表1のJWSトークンに含まれるクレームの内容、また認可サーバによる発行、リソースサーバにおける使用については後述する。
次に、設定するクレームについて詳細を説明する。本実施形態においては、JWSトークンを発行する認可サーバが、認可情報として“authz:scopes”、 “authz:client_id”のクレームを設定する。すなわち、“authz:scopes”としてリソースサーバが取得を許可するリソースを表すスコープリストを設定する。また、“authz:client_id”としてリソースサーバにアクセスするクライアントのIDを設定する。
さらに、同じくJWSトークンを発行する認可サーバが、“authz:tokened”のトークンに紐付く属性情報として、“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:applicationid”としてクライアントアプリケーションのIDであるアプリケーションID。詳細は、後述する。
本実施形態のJWSトークンは、それぞれエンコード済みのヘッダー、本体の情報に相当するペイロード、署名情報の3つを、この順序でピリオド文字('.')を区切り文字として連結したURL-safeな文字列である。JWSトークンは、JWSコンパクトシリアライゼーション仕様に従っている。
本実施形態のJWSトークンを発行する認可サーバにおいては、まず、ヘッダーをJWTの仕様であるRFC7519によりJSONとしてエンコード(すなわち、符号化、暗号化)し、エンコード済ヘッダーを生成する。次に、本体の情報(即ちペイロード)である表1のクレームの内容を、JWTの仕様であるRFC7519によりJSONとしてエンコードし、エンコード済ペイロードを生成する。そして、エンコード済ヘッダーとエンコード済ペイロードを、JWSの仕様であるRFC7515のコンパクトシリアライゼーション仕様に従って秘密鍵を用いて暗号化することでデジタル署名し、エンコード済署名を生成する。最後に、生成したエンコード済ヘッダーとエンコード済ペイロード、エンコード済署名を、ピリオドを介して連結させ、JWSトークンを生成する。詳細は、図9を用いて後述する。
本実施形態においては、JWSヘッダーとしてJWSの署名に使われる暗号アルゴリズムを識別する“alg”(アルゴリズム)を用いる。具体的には、“alg”として“RS256”(RSASSA-PKCS1_v1_5 using SHA-256)を用いる。“RS256”文字列は、algの値としてIANA JSON Web Signature and Encryption Algorithmsレジストリに登録されている。“alg”は、JSON Web Algorithms(JWA)仕様(RFC7518)のSection 3.1で定義されている。
なお本実施形態においてJWSの署名に使われる暗号アルゴリズム“RS256”で使用する秘密鍵、公開鍵の鍵ペアは、認可サーバが予め生成しておいたものを使用する。また、JWSの署名を検証する公開鍵はJWSトークンを使用するリソースサーバに予め配備しておく。
図5(A)は、認証・認可システムの認可サーバ201における機能を示すブロック図である。認可サーバ201は、テナント管理部601、ユーザ管理部602、クライアント管理部603を備えている。さらに、認可サーバ201は、JWSトークン発行部604、JWSトークン管理部605、JWSトークン検証部606、リソースサーバ情報管理部607を備える。
テナント管理部601は、テナント情報の管理を行う。ユーザ管理部602は、ユーザ情報の管理を行う。クライアント管理部603は、クライアント情報の管理を行う。JWSトークン発行部604はJWSトークンの発行を行い、発行されたJWSトークンの情報は発行済みJWSトークン管理部605に保管される。JWSトークン検証部606は、JWSトークンが有効かどうか検証する。リソースサーバ情報管理部607は、認可サーバ201と連携するリソースサーバ202に関する情報を管理する。
表2〜表8を用いて、図5(A)に示した認可サーバ201の各部が管理するデータテーブルについて詳細を説明する。各部は、下記表に示されたデータテーブルに基づいてJWSトークンを発行、検証する。
表2は、認可サーバ201のユーザ管理部602が管理する、ユーザ管理テーブルである。
Figure 2018093407
表2のユーザ管理テーブルは、ユーザID項目、ユーザIDの内部表現であるUUID(ClientID)項目、前記ユーザIDに対応するパスワードを示すPassword項目、ユーザ種別を示すUser Type項目を含む。認可サーバ201は、UUIDとPasswordの情報の組を検証し、正しければ認証情報を生成する。
表3は、認可サーバ201のユーザ管理部602が管理する、ユーザ属性管理テーブルである。
Figure 2018093407
表3のユーザ属性管理テーブルは、ユーザIDの内部表現であるUUID項目、UUIDのユーザの姓を示すFirst Name項目、名を示すLast Name項目を含む。さらに、ユーザ属性管理テーブルは、ロケールを示すLocale項目、同ユーザの所属するテナントを示すTenant ID項目、同ユーザの電子メールアドレスを示すEmail項目、同ユーザの使用できるサービスを示すService ID項目を含む。
表4は、認可サーバ201のクライアント管理部603が管理する、クライアント管理テーブルである。
Figure 2018093407
表4のクライアント管理テーブルは、クライアントIDを示すClient ID項目、ClientIDのクライアントのクライアント名を示すClient Name項目を含む。さらに、クライアント管理テーブルは、OAuth2(RFC6749)プロトコル等で使用する、同クライアントのリダイレクトURLを示すRedirect URL、同クライアントの使用できるサービスを示すService ID項目を含む。
表5は、認可サーバ201のリソースサーバ情報管理部607が管理する、サービス管理テーブルである。
Figure 2018093407
表5のサービス管理テーブルは、Service ID項目、Scope項目、URL項目を含む。Service ID項目は、リソースサーバで提供するリソースに関するサービスを表すサービスIDを示す。Scope項目は、OAuthプロトコルなどの認可要求のスコープに指定される内容であるScope項目を示す。URL項目は、Service IDに相当するサービス(リソース)を提供するリソースサーバのURLを示すURL項目を含む。
表6は、認証・認可システムの認可サーバ201の、JWSトークン発行部604および発行済みJWSトークン管理部605、JWSトークン検証部606が管理、参照するトークン管理テーブルである。
Figure 2018093407
表6のトークン管理テーブルは、トークンIDを示すToken ID項目、認可トークンや認可コードなどトークンIDのトークンタイプを示すToken Type項目、トークンIDの有効期限を秒で示すExpiration Time項目を含む。さらに、トークン管理テーブルは、OAuthプロトコルなどの認可要求のスコープに指定される内容であるScope項目、OAuthプロトコルなどで使用するトークンIDのGrant Typeを示すGrant Type項目を含む。
表7は、認可サーバ201のJWSトークン発行部604、JWSトークン管理部605、JWSトークン検証部606が管理、参照するリフレッシュトークン管理テーブルである。
Figure 2018093407
表7のリフレッシュトークン管理テーブルは、OAuthプロトコルなどで使用する、リフレシュトークンを管理するテーブルである。リフレッシュトークン管理テーブルは、トークンIDを示すToken ID項目、トークンIDのリフレッシュトークンのIDを示すRefresh Token Type項目を含む。さらに、リフレッシュトークン管理テーブルは、リフレッシュトークンIDの有効期限を秒で示すRefresh Token Expiration Time項目を含む。
表8は、認可サーバ201のJWSトークン発行部604、JWSトークン管理部605、JWSトークン検証部606が管理、参照するトークン属性管理テーブルである。
Figure 2018093407
表8のトークン属性管理テーブルは、OAuthプロトコルなどで使用する、トークン属性を管理するテーブルである。トークン属性管理テーブルは、トークンIDを示すToken ID項目、トークンIDの発行要求元のクライアントIDを示すClient ID項目、トークンIDに紐付くUUIDを示すUUID項目を含む。さらに、トークン属性管理テーブルは、トークンIDを用いて、サービス管理テーブル表5のサービスIDのサービスを利用するアプリケーションを示すApplication IDを含む。
図5(B)は、認証・認可システムのリソースサーバ202における機能を示すブロック図である。リソースサーバ202は、リソース管理部610、JWSトークン管理部611、JWSトークン検証部612、認可サーバ情報管理部613を備える。
リソース管理部610は、後述するスコープとリソースの対応関係の定義を含むリソース情報の管理を行う。JWSトークン管理部611は、JWSトークン情報の管理を行う。JWSトークン検証部612は、JWSトークンの検証を行う。認可サーバ情報管理部613は、リソースサーバ202と連携する認可サーバ201に関する情報を管理する。
図6は、認証・認可システムの署名付き認可トークン発行と検証に関するシーケンス図である。本実施形態ではOAuth2(RFC6749)における認可コードグラントのフローを用いたJWSトークンの発行と検証について述べる。JWSトークンの発行と検証については、認可コードグラントだけでなく、OAuth2(RFC6749)にあるクライアントクレデンシャルグラント、リソースオーナーパスワードクレデンシャルグラント、インプリシットグラント等を用いても良い。
OAuth2プロトコルにおいては、認可トークン発行などのフローを開始する前に、クライアントを認可サーバ201に登録する。クライアント203を認可サーバ201に登録する方法は、通常エンドユーザーとの対話を伴うHTML登録フォームを持つことになる。本実施形態においては、予め必要なクライアントは登録されているものとする。クライアント登録の際、認可サーバ201はクライアント203に対してクライアントID、パスワードを発行する。そして、表2のユーザ管理テーブルのUUID(ClientID)に発行したクライアントを、Passwordに発行したパスワードを登録する。また、クライアント登録の際、後述する認可トークンに付与するScopeに関連付けられたサービスIDの値を、表4のクライアント管理テーブルに登録する。
また、本実施形態においては、認可サーバ201は、OAuth2(RFC6749)の認可コードフローに従い、ユーザ管理テーブル表2のユーザIDに相当するリソースオーナーの認証後、認可コードを登録する。登録する認可コードは、例えば、トークン管理テーブル表6、トークン属性管理テーブル表8などである。そして、クライアント203が認可コードを取得する。
図6において、まず、クライアント203が認可サーバ201に、OAuthプロトコルの仕様に従い認可コード、各種クレデンシャルを示して認可トークンの発行を要求する(S701)。認可サーバ201は、要求に応じてJWSトークンを発行する(S702)。S702の詳細については、図7および図9のフローチャートを参照して、その詳細を説明する。
図7および図9のフローチャートを参照して、JWSトークンの発行の詳細について説明する。図7は、クライアント203からのJWSトークン発行要求に対する、認可サーバ201の応答処理について示したフローチャートである。
認可サーバ201のJWSトークン発行部604は、クライアント203からのJWSトークン発行の要求を受信する(S801)。具体的には、図8に示されるJWSトークン発行要求を受信する。図8は、クライアントから認可サーバに送信されるJWSトークン発行要求の一例を示す図である。
次に、JWSトークン発行部604は、クライアント認証を行う(S802)。具体的には、JWSトークン発行部604は、JWSトークン発行要求のAuthorizationヘッダー部にBase64符号化されて含まれるClientID、パスワードを認証する。本実施形態の場合、Authorizationヘッダーに含まれるBase64符号を復号化し、表2のユーザ管理テーブルのUUID(ClientID)、Passwordの組と比較して認証する。また、OAuth2仕様に従い、JWSトークン発行部604は、表8のトークン属性テーブルを参照し、JWSトークン要求に含まれる認可コード項目がToken ID項目に存在するかどうか確認する。すなわち、code=AipziOBeZoQYbJS6WxSbKBがToken ID項目に存在するかどうか確認する。さらに、該Token IDに対応するClient ID項目を確認し、該Client ID項目に対応するリダイレクトIDを表4のクライアント管理テーブルから検索する。そして、JWSトークン要求に含まれるリダイレクトURI項目(redirect_uri= https%3A%2F%2Fclient%2Eexample%2Ecom%2Fredirect)に一致するかどうか確認する。
次に、JWSトークン発行部604は、S802の認証の成否を判断する(S803)。ここで認証に失敗したと判断された場合は、クライアントにエラーメッセージを返して(S807)処理を終了する。一方、認証に成功したと判断された場合はS804に進む。
認証に成功した場合、JWSトークン発行部604は、権限検証を行う(S804)。すなわち、JWSトークン発行部604は、表4のクライアント管理テーブルのクライアントIDに対応するサービスIDを参照し、さらに表5のサービス管理テーブルのサービスIDに対応するScopeが存在するかどうか確認する。
JWSトークン発行部は、S804のScope存在確認に基づいて、JWSトークン発行要求の権限検証の成否を判定し、トークンの発行の可否を判断する(S805)。クライアントIDに対応するScopeが存在しなければ、JWSトークン発行部604は、権限検証に失敗したとしてエラーメッセージをクライアントに返して(S807)処理を終了する。一方、権限検証に成功、すなわちクライアントIDに対応するScopeが存在したならば、JWSトークン発行部604は、JWSトークン発行が可能であると判断し、S806に進む。そして、JWSトークン発行を行い(S806)処理を終了する。S806の詳細については、図9のフローチャートを参照して説明する。
図9は、認可サーバ201におけるJWSトークンの発行処理について示したフローチャートである。
JWSトークン発行部604は、まず、JWSトークンのJWSヘッダーを生成する(S901)。具体的には、JWSトークン発行部604は、JWSヘッダーとして、"alg": "RS256"、"typ": "JWT"を設定する。そして、JWSトークン発行部604は、生成したJWSヘッダーをエンコードして、エンコード済みJWSヘッダーを生成する。
次に、JWSトークン発行部604は、受信したJWSトークン発行要求に基づいて行われた、クライアント認証および権限検証の情報に従ってJWSトークンのペイロード(即ち、データ本体)を生成する(S902)。JWSトークン発行部604は、JWSトークンのペイロードとして、表1のJWSトークンに含まれるRegistered ClaimとPrivate Claimに対応する情報を設定する。そして、JWSトークン発行部604は、生成したJWSペイロードをエンコードして、エンコード済みJWSペイロードを生成する。
具体的には、JWSトークン発行部604は、まず、表2、表5、表6を参照し、表1のRegistered Claimに対応するクレームを、以下のように設定する。
すなわち、JWTの発行者の識別子"iss"として、認可サーバ201のURI “https://auth.example.com”を設定する。JWTの主語となる主体の識別子"sub"として、JWSトークン発行要求に含まれる認可コードに対応するリソースオーナーのIDである、表2のUUID“1ce42f74-1225-4cbb-b23f-f525dabc3cfd”を設定する。JWTを利用することが想定された主体の識別子一覧"aud"として、S804で検証したScopeに相当するリソースサーバのURLである表5のURL項目の“https://print.srv.example.com”と“https://form.srv.example.com” を設定する。JWTの有効期限"exp"として、本実施形態の場合、JWT発行時から3600秒、すなわち“iat”の値+3600である“1472713413”を設定する。また、“nbf”としてJWT発行時、すなわち“iat”と同じ値“1472709813”を設定する。また、本実施形態においては、JWSトークンの発行時に認可トークンを表6のトークン管理テーブルに示すように発行する。“jti”として、該認可トークンの認可トークンID“b2652f6d75b14aa49adfe89b8808b337ef276e8d1363400d98fab100c7463df0”を設定する。
次に、JWSトークン発行部604は、表1のPrivate Claimに対応するクレームを設定する。このとき、JWSトークン発行部604は、表3、表4、表6、表8を参照し、JWSトークン発行要求のクライアントID、リソースオーナーIDであるユーザID(UUID)に紐付く値を設定する。
すなわち、“authz:scopes”として表6のScopes項目である“[client.PrintService client.FormService]”を設定する。“authz:client_id”として表4のClientID項目の“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.doe@example.com”を設定する。アプリケーションID“ext:appid”として表8のApplicationID項目である“42c5a9626098459e96d4bacd73c29823392a76a02cc94d36985b7dc0d790b9a4”を設定する。
まとめると、S902において、表9に表されるような、署名を付加する前のJWSトークンのデータ本体であるJWSペイロードを設定する。表9は、本実施形態においてJWSトークン発行時にJWSトークン発行部604が設定する、JWSペイロードを示すテーブルである。
Figure 2018093407
次に、JWSトークン発行部604は、JWSペイロードにデジタル署名を行う(S903)。具体的には、エンコード済JWSヘッダーとエンコード済JWSペイロードをピリオドで連結した文字列に対して、ヘッダーで指定されたアルゴリズムで、秘密鍵により暗号化してデジタル署名する。これは、JWSの仕様であるRFC7515のコンパクトシリアライゼーション仕様に従って行われる。そして、このデジタル署名(即ち、JWS署名)をエンコード(BASE64 URLエンコード)して、エンコード済JWS署名を生成する。
最後に、JWSトークン発行部604は、JWSトークンを生成、発行する(S904)。具体的には、エンコード済JWSヘッダー、エンコード済JWSペイロード、およびエンコード済JWS署名をこの順序で、ピリオド文字で連結して、JWSトークンを生成する。S904で生成したJWSトークンの一例を図10に示す。図10は、JWSトークンの一例を示す図である。2つのピリオド(.)によってエンコード済JWSヘッダー、エンコード済JWSペイロード、およびエンコード済JWS署名が連結されている。
ここで図6のフローに戻る。
認可サーバ201のJWSトークン発行部604は、上記のようにJWSトークンを生成すると、クライアント203に該JWSトークンを返却する(S703)。図11は、認可サーバ201がクライアント203に返却するJWSトークンの一例を示す図である。
その後、認可サーバ201において、JWSトークン発行時のクレーム情報から変更が行われる可能性がある(S704)。
認可サーバ201からJWSトークンを受け取ったクライアント203は、先に取得したJWSトークンを使ってリソースサーバ202に対してサービスの提供を要求する(S705)。具体的には、クライアント203は、リソース要求のREST API呼び出しなどの際に、HTTPのAuthenticationヘッダーにJWSトークンを図12に示すようにセットして利用する。図12は、サービスの提供要求のHTTPのAuthenticationヘッダーにJWSトークンをセットした一例を示す図である。
クライアント203からJWSトークンを含むサービスの提供要求を受けたリソースサーバ202は、JWSトークンの検証を行う(S706)。JWSトークンの検証の詳細については、図13および図14を参照して説明する。
図13および図14は、リソースサーバ202のJWSトークン検証について示したフローチャートである。
リソースサーバ202は、クライアント203からのサービス提供要求時、HTTP Authorization ヘッダーとしてJWSトークンを受信する(ステップ1001)。
次に、JWSトークンを受信したリソースサーバ202のJWSトークン検証部612は、JWSトークンを検証する。JWSトークンの検証はRFC7515のA.2.2仕様に従い、公開鍵により復号化して検証を行う。
JWSトークン検証部612は、JWSトークンの検証として、まず、JWS署名を検証する(S1002)。具体的には、JWSトークン検証部612は、まずJWSトークンを、区切り文字ピリオド('.')文字でエンコード済JWSヘッダー、エンコード済JWSペイロード、およびエンコード済JWS署名に分割する。さらにJWSトークン検証部612は、分割したJWSヘッダー、JWSペイロード、JWS署名を復号化(BASE64 URLデコード)する。そして、JWSヘッダーに示されたアルゴリズム(“alg”: “RS256”)より、予め検証用に保存してある公開鍵証明書を用いてJWS署名を検証する。
そして、JWS署名検証の成否を判定する(S1003)。JWS署名の検証に失敗したと判定された場合は、JWSトークン検証部612は、クライアント203にリソース取得エラーを返却して処理を終了する(S1008)。一方、JWS署名の検証に成功したと判定された場合は、S1004に進む。
JWS署名の検証に成功した場合、JWSトークン管理部611は、デコード(復号化)済みのJWSペイロードのJWTを参照して、クレーム情報の取得および検証を行う。ここで取得されるクレーム情報は、図9のS902で設定した表9の値である。
以下、S1004〜S1014において、JWSトークン管理部611がクレーム情報を確認し、認可サーバ201に情報問い合わせの必要のあるクレームを決定し、認可サーバ問い合わせリストを作成する処理について説明する。
JWSトークン管理部611は、JWSトークンに含まれるクレーム情報のうち、表9のRegistered Claimクラスのクレームの検証を行う(S1004)。本実施形態においては、トークンが消費される場所を表す“aud”、有効期限を表す“exp”, “nbt”についてチェックを行う。
JWSトークン管理部611は、S1004の検証の結果に基づいて、トークンの有効、無効を判断する(S1005)。ここで、“aud”に含まれる文字列のうち、リソースサーバ202のURLが含まれない場合や、“exp”が有効期限を過ぎているか、“nbt”が現在時刻以前である場合、受信したJWSトークンが有効でないと判断する。JWSトークンが有効でないと判断した場合は、クライアント203にエラーを返却して処理を終了する(S1008)。一方、“aud”, “exp”, “nbt”の検証に成功したならば、S1006に進む。
次に、JWSトークン管理部611は、S1006〜S1012で、認可サーバに問い合わせが必要なクレームを確認し、認可サーバ問い合わせリストを作成する。
まず、JWSトークン管理部611は、JWSトークンに含まれるクレーム情報のうち、表9のPrivate Claimクラスのクレームの検証を行う(S1006)。具体的には、Private Claimクラスの各クレームについて、クレーム名に、例えば、“@req”や“@recm”などのクレーム情報アノテーションが存在するかどうか確認する。
そして、JWSトークン管理部611は、該クレーム情報アノテーションに“required”アノテーション(“@req”)が存在するかどうか判定する(S1007)。本実施形態の“required”アノテーションは、本クレームをリソースサーバが使用する場合、認可サーバに都度確認が必須であることを表す。例えば、電子メールアドレスを示すクレームが、“required”アノテーションが付加された“ext:email@req”クレームであれば、リソースサーバは該クレームを参照し電子メールアドレスを使用する場合、認可サーバに都度確認を行う。そのため、JWSトークン発行時から後に認可サーバ201の該情報が更新された場合でも、リソースサーバは更新内容を反映して、更新後の電子メールアドレスを使用してメールを正しく送信することができる。S1007において、“required”アノテーションが存在すると判定された場合はS1010に進む。一方、“required”アノテーションが存在しないと判定された場合はS1009に進む。
JWSトークン管理部611は、“required”アノテーションが付加されたクレームが、リソースサーバ202で使用するクレーム項目かどうかを判定する(S1010)。例えば、本実施形態の場合、“ext:email@req”項目の値である電子メールアドレスを使用するか否か判定する。S1010において、該クレームを使用すると判定された場合には、S1011に進む。そして、認可サーバ201に情報問い合わせを行うための認可サーバ問い合わせリストに、該クレームを追加する(S1011)。一方、JWSトークン管理部611が、“@req”アノテーションが付いているクレーム項目を使用しないと判定した場合は、S1012に進む。
S1012では、JWSトークン管理部611は、認可サーバに確認が必要かまだ判定されていないクレーム項目が残っているかどうか判定する(S1012)。クレーム項目がまだ残っていると判定された場合は、S1007に戻り、次のクレームの判定処理を継続する。一方、クレーム項目が残っていない、即ち、すべてのクレーム項目が認可サーバに確認が必要であるか否か判定されたと判定された場合は、S1013に進む。
JWSトークン管理部611は、クレーム項目名に“@req”アノテーションが存在しないと判定した場合、該クレーム情報アノテーションに“recommended”アノテーション(“@recm”)が存在するかどうか判定する(S1009)。本実施形態の“recommended”アノテーションは、本クレームをリソースサーバが使用する場合、認可サーバに都度確認を推奨することを表す。例えば、本実施形態では、テナントIDを示すクレームが、“recommended”アノテーションが付加された“ext:tenanted@recm”クレームである。そのため、リソースサーバが該クレームを参照し、テナントIDを利用する場合、認可サーバに都度確認を行うことが推奨されることを示している。例えば、JWSトークン発行時から後に、認可サーバ201の該情報が更新された場合、必要であればリソースサーバは更新内容を反映して更新後のテナントIDを使用して正しくテナントIDの表示を行うことができる。S1009において、“@recm”が存在すると判定された場合、つまり本実施形態の場合クレーム項目名が表9の“ext:tenantid@recm”であれば、S1015に進む。一方、“@recm”が存在しないと判定された場合はS1012に進む。
S1015でJWSトークン管理部611は、“@recm”が存在すると判定されたクレームが、リソースサーバ202で確認したい項目かどうか判定する(S1015)。例えば、リソースサーバ202が正確なテナントIDに基づいてリソースを返す場合かどうかなどを判定する。S1015において、確認したい項目でないと判定された場合はS1012に進む。一方、確認したい項目であると判定された場合は、S1010に進み、実際に使用するクレーム項目かどうかを判定して、使用するのであれば、S1011において認可サーバ201に情報問い合わせを行うための認可サーバ問い合わせリストに追加する。
上記のように、認可サーバ問い合わせリストへの追加が終了し、S1012の判定で表9のクレーム項目を全て判定して検証すべき次のクレーム項目が存在しなくなった場合、S1013に進む。そして、後述する認可サーバ問い合わせ処理(S1013)とクレーム確認処理(S1014)を行って処理を終了する。
図15は、図14のS1013に記載の、リソースサーバ202によるJWSトークン認可サーバ問い合わせ処理の詳細を示すフローチャートである。本フローチャートは、JWSトークン管理部611が、図14のJWSトークン検証処理のS1012において表9のクレーム項目を全て判定した後に、認可サーバ問い合わせリストを参照して実行する。なお、本実施形態においては、認可サーバ問い合わせリストに“ext:email@req”と“ext:tenantid@recm”が追加されているものとする。
まず、JWSトークン管理部611は、認可サーバ問い合わせリストが空かどうか判定する(S1101)。ここで該リストが空であると判定されれば、本フローチャートの処理を終了する。一方、該リストが空でないと判定されれば、S1102に進む。
次に、JWSトークン管理部611は、認可サーバ201に対してJWSトークン情報の検証を行いその検証結果をリソースサーバ202に返却するよう、検証要求(情報取得要求)を行い、認可サーバ201からJWSトークン情報を取得する(S1102)。なお、この検証要求は、図6のS707に対応している。
JWSトークン情報取得は、JWSトークン管理部611が以下のように行う。まず、JWSトークン管理部611は、認可サーバ問い合わせリストのクレーム項目の値を空欄にして、クレーム情報取得用JWSトークン(以下、情報取得用トークンと記す)を生成する。すなわち、本実施形態の場合、表9のうち認可サーバ問い合わせリストに存在する“ext:email@req”と“ext:tenantid@recm”の値を空欄にしたJWSトークンペイロードを作成する。さらにJWSトークン検証部612が分割したJWSヘッダー、JWS署名とともにJWSヘッダー、JWSペイロード、JWS署名を符号化(BASE64 URLエンコード)する。そして、この順序でピリオド('.')文字を区切り文字として連結した文字列にして、情報取得用トークンを生成する。なお、情報取得用トークンは、署名部分がリソース要求APIのJWSトークンと同じで厳密にはJWSではないクレーム情報取得用のトークンである。
次に、JWSトークン管理部611は、認可サーバ201に対して、検証要求を行う。具体的には、JWSトークン管理部611は、生成した情報取得用トークンを認可サーバ201に送信し、認可サーバ問い合わせリストのクレームの値を空欄にした“ext:email@req”と“ext:tenantid@recm”の値を要求する。
情報取得用トークンにより検証および情報取得を依頼された認可サーバ201のJWSトークン管理部605は、取得した情報取得用JWSトークンを、区切り文字ピリオド('.')文字で分割する。区切り文字ピリオド('.')文字での分割により、情報取得用トークンは、エンコード済JWSヘッダー、エンコード済JWSペイロード、およびエンコード済JWS署名に分割される。そして、発行済みJWSトークン管理部605は、分割したJWSペイロードを復号化(BASE64 URLデコード)し、“Registered Claim”クラスの"jti"クレームを参照する。本“jti”クレームは認可トークンの認可トークンIDを表すので、発行済みJWSトークン管理部605は、“jti”クレームの値である“b2652f6d75b14aa49adfe89b8808b337ef276e8d1363400d98fab100c7463df0”が表6トークン管理テーブルに存在することを確認する。さらに、発行済みJWSトークン管理部605は、トークンIDに基づいて、表8のトークン属性管理テーブルから情報取得用トークンのJWSペイロードのクレームの値の空欄項目を取得する。すなわち本実施形態においては、認可トークンID検証の後、“ext:email@req”として表8の“john.doe@example.com”を、“ext:tenantid@recm”として“170BA”を取得する。本実施形態においてはクレーム値にJWSトークン発行時と変更はないが、JWSトークン発行時から変更があった場合には、S1102のトークン情報取得により変更後のクレーム値を取得することができる。
認可サーバ201のJWSトークン管理部605は、情報返却用トークンを生成する。具体的には、まず、取得した情報取得用トークンをコピーし、取得したクレーム値を該コピーした情報取得用トークンのJWSペイロードに設定する。なお、本実施形態において取得したクレーム値は、例えば、“ext:email@req”として“john.doe@example.com”、 “ext:tenantid@recm”として“170BA”である。さらに、JWSトークン管理部605は、JWSペイロードを符号化(BASE64 URLエンコード)する。そして、JWSヘッダー、JWSペイロード、JWS署名を、この順序でピリオド('.')文字を区切り文字として連結した文字列にして情報返却用トークンを生成する。
その後、JWSトークン管理部605は、情報返却用トークンをリソースサーバ202に返却する。
情報返却用トークンを受信したリソースサーバ202は、JWSトークン管理部611およびJWSトークン検証部612により、情報返却用トークンの処理を行う。
ここで図15のフローチャートに戻る。認可サーバ201から情報返却用トークンを受信したリソースサーバ202のJWSトークン管理部611は、受信が成功したかどうか判定する(S1103)。受信が成功していれば、JWSトークン管理部611は処理を終了する。一方、受信が失敗していた場合は、S1102と同様のトークン情報取得をリトライする(S1104)。そして、JWSトークン管理部611は、リトライの成否を判定する(S1105)。受信が成功していれば、JWSトークン管理部611は処理を終了する。一方、受信に失敗していた場合は、S1106に進む。
JWSトークン管理部611は、S1104のJWSトークン情報取得のリトライに失敗した場合、JWSトークン検証部612に依頼し、認可サーバ問い合わせリストに情報取得失敗項目を作成する(S1106)。情報取得失敗項目とは、JWSトークン情報取得のリトライ後、情報返却用トークンのうち正常に取得できなかったクレーム項目の値を空文字列にしたものである。なお、情報返却用トークン自体の取得に失敗した場合は、全クレーム項目の取得失敗とし、認可サーバ問い合わせリストの全クレーム項目の値を空文字列にする。情報取得失敗項目を作成すると、リソースサーバ202は認可サーバ201への問い合わせ処理を終了する。
本実施形態においては、リトライを1回行う例を示したが、リトライの回数は所定の回数行われるように設定してもよい。また、例えばリトライの回数を認可サーバ問い合わせリストにあるクレーム名に付加されたアノテーションに“@recm”が含まれる場合には5回、“@recm”のみである場合には3回にするなど、問い合わせの必要度に応じて設定するようにしてもよい。
図16は、図14のフローチャートで示した、S1014のクレーム確認処理の詳細を示すフローチャートである。図15のフローチャートで詳細を示した、図14のS1013のリソースサーバ202のJWSトークン認可サーバ問い合わせ処理が終了すると、JWSトークン検証部612は、S1014に進み、認可サーバ問い合わせリストのクレーム項目を確認する。
まず、JWSトークン検証部612は、認可サーバ問い合わせリストの存在を確認する(S1201)。そして、認可サーバ問い合わせリストが存在するかどうか、すなわち、リストが空かどうかを判定する(S1202)。該リストが空であれば、認可サーバ201へのJWSトークン情報取得がなされなかったと判定して処理を終える。
一方、該リストが空でなければ、以下ステップでJWSトークン情報取得の結果を確認する。まず、JWSトークン検証部612は、該リストの“Required”アノテーションの付いた確認必須のクレーム項目の値の取得成功を判定する(S1203)。該項目が空であれば、必須情報の情報取得に失敗したとみなして、JWSトークン検証部612は、処理中断のエラーを返却して(S1206)処理を終える。一方、“Required”アノテーションの付いたクレーム項目の値のチェックに成功したならば、S1204に進む。
次に、JWSトークン検証部612は、ステップ1203と同様に該リストの“Recommended”アノテーションの付いた確認推奨のクレーム項目の値の取得成功を判定する(S1204)。該項目が空であれば、推奨情報の情報取得に失敗したとみなして、JWSトークン検証部612は、取得推奨データのデータ取得失敗のエラーを返却して(S1207)処理を終える。一方、“Recommended”アノテーションの付いたクレームの値のチェックに成功したならば、S1205に進む。そして、JWSトークン検証部612は、全てのJWSトークンに含まれるクレームの値を取得したとしてデータ取得成功を返却して処理を終える(S1205)。
以上により、リソース要求API呼び出しを受けたリソースサーバ202による、JWSトークンの検証(S706)、リソースサーバ202のJWSトークン認可サーバ問い合わせ処理(S707)、検証処理(S710)が終了する。その後、リソースサーバ202のリソース管理部610は、検証処理が成功した場合は、クライアント203からのリソースサーバ202へのリソース要求API呼び出しに応じて処理結果(すなわち、要求リソース)を返して処理を終える(S711)。一方、検証処理が失敗したら、失敗を通知して処理を終える(S711)。
署名付きトークン(JWSトークン)に付与された情報には、リソースサーバがトークン有効期限内に必ず確認したい情報と、確認が推奨される情報が混在している。すなわち、“Required”アノテーション付与のクレームの値と、“Recommended”アノテーション付与のクレームの値が混在している。以上のように、本実施形態においては、JWSトークンに付加されたクレーム情報アノテーションに基づいて、認可サーバのポリシーに従いリソースサーバで適切に確認、認可サーバ問い合わせを行う。認可サーバのトークン検証、情報取得の負荷を低減し、リソースサーバのパフォーマンスを上げることができる。
(第2実施形態)
第1実施形態においては、リソースサーバ202による認可サーバ201に対する、検証要求(S707)において情報取得用トークンを用い、その応答(S709)において情報返却用トークンを用いた。本実施形態においては、該情報取得用トークンをGraphQL問い合わせに変更した例を説明する。GraphQLは、Facebook社により開発され、現在RFCにドラフト案が公開されている、クライアント・サーバアプリケーション向けのデータモデリング記述のためのクエリ言語である。本実施形態においては、上記リソースサーバ202の認可サーバ201への検証要求およびその応答に、GraphQLを用いる。GraphQLは、統一されたAPI(Endpoints)、型をもつため、REST APIのバージョン管理、エンドポイント管理、クライアント側で取得したデータの管理など、一般に複雑で面倒な部分が解決できる。また、第1実施形態の情報取得用認可トークンと比べて、必要な情報のみ問い合わせることが可能なため、リソースサーバ202と認可サーバ201でやり取りされるクレーム要求、応答のデータ量を削減することも可能となる。
図17は、本実施形態における認証・認可システムの署名付き認可トークン発行と検証に関するシーケンス図である。図13において、S1301〜S1306は、図6におけるS701〜S706と同様である。また、S1310およびS1311は、図6におけるS710およびS711と同様である。以下では、第1実施形態との差異であるS1307〜S1309について説明する。なお、問い合わせクレームの判定については、第1実施形態の基準に従う。
S1307において、リソースサーバ202のJWSトークン管理部611は、情報取得用QraphQLを含む検証要求をREST API呼び出しとして認可サーバ201に送信し、クレームの値の問い合わせを行う。
図18(A)は、リソースサーバ202が認可サーバ201に送信する検証要求の一例を示す図である。検証要求は、具体的には、HTTPのPOSTメソッドで、認可サーバ201のGraphQLを受信するエンドポイントである/api/graphqlに対し、Content-TypeとしてGraphQLを示す“applicatioon/graphql”を指定し、Authorizationヘッダーとして、“Bearer” + 表9の“jti”で示される認可トークンIDをBase64 URL符号化した文字列を示す。またリクエストボディは、認可サーバ201の表6トークン管理テーブルで管理されているトークンID“b2652f6d75b14aa49adfe89b8808b337ef276e8d1363400d98fab100c7463df0”に紐付く電子メールアドレス(“email”)とテナントID(“tenantid”)を検索、取得することを示すGraphQL言語である。上記トークンIDは、S1305で取得したJWSトークンの“jti”クレームに含まれる認可トークンのIDである。
また、本実施形態の認可サーバ201とリソースサーバ202が同じセキュリティドメインに属しているならば、図18(B)に示すようなクエリーパラメーターを用いても良い。図18(B)は、同じセキュリティドメインに属しているリソースサーバ202から認可サーバ201に送信される検証要求のクエリーパラメーターの一例を示す図である。
リソースサーバ202からの検証要求により、検証および情報取得を依頼された認可サーバ201のJWSトークン管理部605は、要求の検証と要求に基づいた情報取得を行う(S1308)。具体的には、まず、取得した検証要求のトークンIDを参照する。JWSトークン管理部605は、トークンIDの値である“b2652f6d75b14aa49adfe89b8808b337ef276e8d1363400d98fab100c7463df0” が表6トークン管理テーブルに存在することを確認する。さらに、JWSトークン管理部605は、トークンIDに基づいて、表8のトークン属性管理テーブルから前記GraphQLの“email”, “tokenid”を取得する。すなわち本実施形態においては、前記認可トークンID検証の後、“email”として表8の“john.doe@example.com”を、“tenant”として“170BA”を取得する。
本実施形態においては前記クレーム値にトークン発行時と変更はないが、万一JWSトークン発行時から変更があった場合にも、本JWSトークン情報取得により変更後のクレーム値を取得することができる。
認可サーバ201のJWSトークン管理部605は、取得した値(すなわち、“email”として“john.doe@example.com”、 “tenantid”として“170BA”)を、リソースサーバ202に返却する(S1309)。図18(C)は、S1309において認可サーバ201からリソースサーバ202へ返却されるQraphQL返却の一例を示す図である。
以上により、リソース要求API呼び出しを受けたリソースサーバ202による、JWSトークンの検証(S1306)、リソースサーバ202のJWSトークン認可サーバ問い合わせ処理(S1307)、検証処理(S1310)が終了する。JWSトークン発行時からトークン値に変更があった場合にも、以上の処理により変更後のクレーム値を取得することができる。その後、リソースサーバ202のリソース管理部610は、クライアント203からのリソースサーバ202へのリソース要求API呼び出しに応じて処理結果(すなわち、要求リソース)を返却し(S1311)、処理を終える。
以上説明したように、本実施形態において、リソースサーバ202から認可サーバ201への検証要求およびその応答にGraphQLを用いる。GraphQLの統一されたAPI(Endpoints)、型により、REST APIのバージョン管理、エンドポイント管理、クライアント側で取得したデータの管理など、一般に複雑で面倒な部分が解決できる。また、第1実施形態の情報取得用認可トークンと比べて、必要な情報のみ問い合わせることが可能なため、リソースサーバ202と認可サーバ201でやり取りされるデータ量を削減することも可能となる。
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
以上、本発明の好ましい実施形態について説明したが、本発明は、これらの実施形態に限定されず、その要旨の範囲内で種々の変形および変更が可能である。

Claims (18)

  1. ネットワークを介してサービスを提供するサービス提供装置と、認可サーバとを含むシステムであって、
    前記認可サーバは、
    付加情報が付加された、署名付きの認可情報を発行する発行手段を有し、
    前記サービス提供装置は、
    前記署名付きの認可情報の前記署名を検証する署名検証手段と、
    前記署名付きの認可情報に含まれる各項目が前記認可サーバに問い合わせるべき項目であるかを示す前記付加情報に基づいて、前記認可サーバに問い合わせが必要な項目の検証要求を行う検証要求手段と、
    を有することを特徴とするシステム。
  2. 前記検証要求手段は、前記付加情報に基づいて前記認可サーバに問い合わせるべき項目のリストを作成し、前記リストに基づいて前記検証要求を行うことを特徴とする請求項1に記載のシステム。
  3. 前記検証要求手段は、前記付加情報が付加された項目がクライアントから要求されたサービスで利用する情報であるか否か判定し、前記サービスで利用する情報であると判定された場合に、前記リストに該項目を追加することを特徴とする請求項2に記載のシステム。
  4. 前記付加情報は、各項目が前記認可サーバへの問い合わせが必須あるいは推奨であるかを示すアノテーションであることを特徴とする請求項1乃至請求項3のうちいずれか1項に記載のシステム。
  5. 前記付加情報は、前記認可情報に含まれる各項目の項目名に付加されることを特徴とする請求項1乃至請求項4のうちいずれか1項に記載のシステム。
  6. 前記認可サーバは、さらに、前記サービス提供装置からの前記検証要求に基づいて検証を行う検証手段を有し、
    前記サービス提供装置は、さらに、前記認可情報に基づいてサービスの提供を行う提供手段を有し、
    前記提供手段は、前記検証要求手段が前記検証要求を行った場合は、前記検証手段の検証結果に基づいて、前記サービスの提供を行うことを特徴とする請求項1乃至請求項5のうちいずれか1項に記載のシステム。
  7. 前記付加情報に基づいて前記認可サーバに問い合わせるべき項目がない場合は、前記検証要求手段は、前記認可サーバへの前記検証要求は行わず、前記提供手段は、前記署名付きの認可情報に基づいて、前記サービスの提供を行うことを特徴とする請求項6に記載のシステム。
  8. 前記検証要求手段は、前記認可サーバの前記検証手段による検証結果の取得に失敗した場合、前記検証要求のリトライを行うことを特徴とする請求項6または請求項7に記載のシステム。
  9. 前記検証要求手段による前記リトライを所定の回数行い、前記検証結果の取得に失敗した場合、前記提供手段は、クライアントにエラーを返却することを特徴とする請求項8に記載のシステム。
  10. 前記提供手段は、前記検証結果の取得に失敗した項目が、前記認可サーバへの問い合わせが必須の項目である場合、処理を中断してエラーを返却することを特徴とする請求項9に記載のシステム。
  11. 前記検証要求手段は、前記検証要求として、前記認可サーバに問い合わせるべき項目の値を空にした署名付きの認可情報を前記認可サーバに送信することを特徴とする請求項1乃至10のうちいずれか1項に記載のシステム。
  12. 前記検証要求手段は、GraphQLを用いて前記検証要求を行うことを特徴とする請求項1乃至10のうちいずれか1項に記載のシステム。
  13. 前記発行手段は、秘密鍵により暗号化して前記署名を行い、
    前記署名検証手段は、前記秘密鍵に対応する公開鍵により前記署名付きの認可情報を復号化して前記署名を検証することを特徴とする請求項1乃至請求項12のうちいずれか1項に記載のシステム。
  14. 前記署名付きの認可情報には、トークン情報およびトークンに紐付くユーザ情報が含まれていることを特徴とする請求項1乃至請求項13のうちいずれか1項に記載のシステム。
  15. 前記発行手段は、JSON Web Tokenの仕様に従って表現された認可情報を、JSON Web Signatureの仕様に従ってデジタル署名したトークンを前記署名付きの認可トークンとして発行することを特徴とする請求項1乃至請求項14のうちいずれか1項に記載のシステム。
  16. 認可サーバが発行した、付加情報が付加された署名付きの認可情報を用いて認証を行い、ネットワークを介してサービスを提供するサービス提供装置であって、
    前記署名付きの認可情報の前記署名を検証する署名検証手段と、
    前記署名付きの認可情報に含まれる各項目が前記認可サーバに問い合わせるべき項目であるかを示す前記付加情報に基づいて、前記認可サーバに問い合わせが必要な項目の検証要求を行う検証要求手段と、
    を有することを特徴とするサービス提供装置。
  17. ネットワークを介してサービスを提供するサービス提供装置と、認可サーバとを含むシステムの制御方法であって、
    前記認可サーバにおいて、付加情報が付加された、署名付きの認可情報を発行する工程と、
    前記サービス提供装置において、前記署名付きの認可情報の前記署名を検証する工程と、
    前記サービス提供装置において、前記署名付きの認可情報に含まれる各項目が前記認可サーバに問い合わせるべき項目であるかを示す前記付加情報に基づいて、前記認可サーバに問い合わせが必要な項目の検証要求を行う工程と、
    を有することを特徴とする制御方法。
  18. 請求項16に記載のサービス提供装置の各手段としてコンピュータを機能させることを特徴とするプログラム。
JP2016236299A 2016-12-05 2016-12-05 システム、リソースサーバ、システムの制御方法およびプログラム Pending JP2018093407A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016236299A JP2018093407A (ja) 2016-12-05 2016-12-05 システム、リソースサーバ、システムの制御方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016236299A JP2018093407A (ja) 2016-12-05 2016-12-05 システム、リソースサーバ、システムの制御方法およびプログラム

Publications (1)

Publication Number Publication Date
JP2018093407A true JP2018093407A (ja) 2018-06-14

Family

ID=62566392

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016236299A Pending JP2018093407A (ja) 2016-12-05 2016-12-05 システム、リソースサーバ、システムの制御方法およびプログラム

Country Status (1)

Country Link
JP (1) JP2018093407A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020036234A (ja) * 2018-08-30 2020-03-05 キヤノン株式会社 情報処理装置及び認可システムと検証方法
CN117331964A (zh) * 2023-12-01 2024-01-02 成都明途科技有限公司 数据查询方法、装置、设备及存储介质

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020036234A (ja) * 2018-08-30 2020-03-05 キヤノン株式会社 情報処理装置及び認可システムと検証方法
CN110875925A (zh) * 2018-08-30 2020-03-10 佳能株式会社 信息处理装置、授权系统及验证方法
CN110875925B (zh) * 2018-08-30 2022-07-19 佳能株式会社 信息处理装置、授权系统及验证方法
JP7228977B2 (ja) 2018-08-30 2023-02-27 キヤノン株式会社 情報処理装置及び認可システムと検証方法
CN117331964A (zh) * 2023-12-01 2024-01-02 成都明途科技有限公司 数据查询方法、装置、设备及存储介质
CN117331964B (zh) * 2023-12-01 2024-02-27 成都明途科技有限公司 数据查询方法、装置、设备及存储介质

Similar Documents

Publication Publication Date Title
JP6857065B2 (ja) 認証認可サーバー、リソースサーバー、認証認可システム、認証方法及びプログラム
EP3525415B1 (en) Information processing system and control method therefor
JP6141076B2 (ja) システムおよびその制御方法、アクセス管理サービスシステムおよびその制御方法、並びにプログラム
CN110875925B (zh) 信息处理装置、授权系统及验证方法
US11122031B2 (en) Privacy-aware ID gateway
US8635679B2 (en) Networked identity framework
US9401911B2 (en) One-time password certificate renewal
JP6929181B2 (ja) デバイスと、その制御方法とプログラム
US20130117558A1 (en) Method and apparatus for authenticating a digital certificate status and authorization credentials
JP4913457B2 (ja) 認証強度の異なるサーバに対応した連携型認証方法及びシステム
JP2018205840A (ja) システム、その方法およびそのプログラム
EP2669837B1 (en) Cooperation system, cooperation method threreof, information processing system, and program thereof
JPWO2016092630A1 (ja) 情報処理装置、情報処理装置の制御方法、情報処理システム、およびコンピュータプログラム
JP2020067967A (ja) 情報処理システム、情報処理装置、情報処理方法、およびプログラム
JP2018092446A (ja) 認証認可システム及び情報処理装置と認証認可方法とプログラム
US9621349B2 (en) Apparatus, method and computer-readable medium for user authentication
JP2020030759A (ja) 権限委譲システム、情報処理装置およびその制御方法、並びにプログラム。
JP2019101668A (ja) システムおよびその制御方法
JP2018093407A (ja) システム、リソースサーバ、システムの制御方法およびプログラム
TWI527419B (zh) Method and System of Integrating Backend Service Authentication with Proxy Servo
JP6041537B2 (ja) システムおよび制御方法およびプログラム
JP6604367B2 (ja) 処理装置及び情報処理装置
US10554789B2 (en) Key based authorization for programmatic clients
JP2020154447A (ja) 情報処理システム及びプログラム
JP2015184752A (ja) 中継装置及びプログラム