「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>認証基盤]]

* 目次 [#h992f734]
#contents

*概要 [#efb6fb2e]
[[トークンには色々な意味があるが、>http://e-words.jp/w/%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3.html]]~

ここでは、セキュリティ対策や認証・認可などの処理のための、~
認証チケット(証拠)などので使用するトークンについて説明する。

*用語 [#z3b25ede]
**クレーム(クレームセット) [#b5414871]
-対象となるエンティティ("サブジェクト")に関する事実の情報
-クレームの集合が、クレームセットになる。
*トークンの種類 [#i8de040f]
認証・認可で使用するトークンにも様々なものがアル。

**アサーションとトークン [#efc85f9f]
-以下の様な標準仕様を見ると、
**セキュリティ トークン [#pa932cd4]
-コンピュータ・サービスの利用権限のある利用者に、~
認証の助けとなるよう与えられる物理デバイス

--Assertions and Protocols for the OASIS SAMLV2.0
-ハードウェア・トークン、認証トークン、暗号トークンとも呼ばれる。

--RFC 7519 - JSON Web Token (JWT)
***タイプ [#u3b82234]
以下のようなタイプが有り、基本的に物理デバイスのもの。

-それぞれ、以下のように定義されている。
-Bluetooth型トークン
-携帯電話
-非接続型トークン
-PCカード型トークン
-スマートカード型トークン
-USB型トークン
-スマートカード・USB型トークン

--[[トークン>#if523ce8]] :~
「複数の[[クレーム(クレームセット)>#b5414871]]」を格納する「[[アサーション>#xbeb945f]]」
※ 昨今の物理デバイス上の[[TPM>TPM(Trusted Platform Module)]]を使用した~
  ソフトウェア・トークンも入れて良さそう。

--[[トークン>#if523ce8]]・プロファイル :~
「[[アサーション>#xbeb945f]]」のフォーマット
***実装 [#v2982248]
-デジタル署名
--利用者だけが署名鍵にアクセスできることが満たされている必要がある。
--署名は利用者の識別情報の証明にも使えるので、ユーザ認証にも使用できる。

-・・・従って、「[[アサーション>#xbeb945f]]」≒「[[トークン>#if523ce8]]」らしい。
-SSOソフトウェア
--シームレスな認証や、password fillingを行なう場合がある。
--同様に、暗号化技術が使用され、改ざん等が無いか検証可能になっている。

***アサーション [#xbeb945f]
≒ 表明:(自分の考え・決意などを、)はっきりあらわし示すこと。~
プログラムの前提として満たされるべき条件を記述するもの。
-ワンタイムパスワード
--ログイン毎や、時間経過で変化するタイプ
--チャレンジ&レスポンスなどもワンタイムパスワード

-複数の[[クレーム(クレームセット)>#b5414871]]から構成され、

--何らかの対象に関する属性や設定などの情報を列挙した、データ集合を指す場合が多い。

--認証・認可では、単なる属性ではなく、認証ユーザのIDや資格・権限情報、~
その他の属性情報の表明のためのデータ集合として使用される。

--標準化された技術仕様において、~
適用場面の限られたオプション仕様などのことをプロファイルということがある。

-以下、RFC7521からの引用。
--セキュリティドメイン間でIDとセキュリティ情報の共有を容易にする情報のパッケージ
--アサーションには、通常、以下のような情報が含まれる。
---主体または主体に関する情報
---アサーションを発行した当事者に関する情報
---およびアサーションが発行された日時
---およびアサーションが有効であるとみなされる条件~
(たとえば、いつどこで使用できるかなど)

--用語
---発行者~
アサーションを作成し、署名し、完全性保護するエンティティ
---依拠当事者~
アサーションを消費し、その情報に依存するエンティティ

***トークン [#oe033372]
上記の文脈上からは、

-先ず、[[SAML]][[アサーション>#xbeb945f]]や[[JWT]][[アサーション>#xbeb945f]]などの標準仕様があり、~

-それを[[SAML]]や[[OAuth]]、[[OpenID Connect]]で使用する際の~
オプション仕様を、「トークン・プロファイル」と言う。

ざっくり、[[アサーション>#xbeb945f]]を実際に使うとトークン。

解り易いのが、[[JWT]][[アサーション>#xbeb945f]]をアクセストークンとして使用する例。

*トークンの種類 [#i8de040f]

**セキュリティ トークン [#pa932cd4]
**認証・認可プロトコルのトークン [#ga0b7270]
当該アクセスに添付され認証・認可をするための[[アサーション>#xbeb945f]]。

従って、以下が含まれた情報。

-認証・認可に必要な[[クレームから構成されるクレームセット>#b5414871]]
-認証オーソリティによって上記に署名を加えたコントラクト(契約)~
署名には、暗号化技術が使用され、改ざん等が無いか検証可能になっている。

***SSOソフトウェア [#v2982248]
-シームレスな認証や、password fillingを行なう場合がある。
-同様に、暗号化技術が使用され、改ざん等が無いか検証可能になっている。

***ワンタイムパスワード [#b3253de1]
-ログイン毎や、時間経過で変化するタイプ
-チャレンジ&レスポンスなどもワンタイムパスワード

***Authorizationヘッダ [#qcca7e53]
-Digest認証、Basic認証のCredentialもある種の認証トークンと言える。~
ユーザIDとパスワードの情報を含んでいる([[クレームセット>#b5414871]] → [[アサーション>#xbeb945f]])。

-Authorizationヘッダ情報に設定される。~
以下を参照するとBearer Token も OAuth に限らず、~
一般的な HTTP 認証トークンとして使用可能であるもよう。
--[[OAuth2.0を認証に使用する際の問題点とその対応方法>OAuth#add861ca]]
-- RFC 7235 で "Authorization: auth-scheme (token68 / auth-params)" が定義済みで、~
"auth-scheme" には Basic, Digest に加え Bearerが登録済み(IANAにより管理)。

---トークンを利用した認証・認可 API を実装するとき~
Authorization: Bearer ヘッダを使っていいのか調べた - Qiita~
http://qiita.com/uasi/items/cfb60588daa18c2ec6f5

***[[SAML]] / [[OpenID]]関連 [#b38de47f]
-持参人切符 : Bearer Token
--通常の[[OAuth]]のTokenは「bearer・token」。
--「bear (持ってきた)+ er(人)」=「持参人」。
--具体的には「電車」の「切符」のこと。
--持参人は誰でも、切符が有効ならば利用可能。

-記名式切符 :~
Sender Constrained Token, User Constrained Token, ~
Holder-of-Key Token, Proof-of-possession Token.~
--上記「切符」に対し、名前が書かれた「国際線」の「ボーディングパス」など。
--ゲートでは、名前・顔とパスポートの記載が一致するかを確認する。
--誰かがボーディングパスを盗んでも、使うことはできない(盗難 & 再生の防止)。

- MAC Token
--Accessトークンと共にMessage Authentication Code (MAC)キーを発行する。
--MACキーはHTTPリクエストの一部分を署名するのに利用される。

-参考
--The OAuth 2.0 Authorization Framework: Bearer Token Usage(日本語)~
http://openid-foundation-japan.github.io/rfc6750.ja.html
--draft-ietf-oauth-v2-http-mac - OAuth 2.0 Message Authentication Code (MAC) Tokens~
https://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac
--OAuthで「記名式」トークンを使うもう一つの方法 | @_Nat Zone~
https://www.sakimura.org/2017/04/3765/
--OAuth 2.0のbearer tokenの最新仕様を調べたらあまり変わってなかった - r-weblife~
http://d.hatena.ne.jp/ritou/20110402/1301679908
--OAuth アクセストークンの実装に関する考察 - Qiita~
https://qiita.com/TakahikoKawasaki/items/970548727761f9e02bcd

**ハード / ソフト [#f5d6d60c]
**その他 [#r7f60170]

***ハード [#a7f7c849]
-タイプ
--キーホルダタイプ
--カードタイプ
--USBタイプ
***SASトークン [#w01b1c2d]
-SAS:Shared Access Signatures(共有アクセス署名)
-1 つまたは複数のリソースを指す署名付き URI
-昨今、クラウド関連のサービスで使用されることが多い。

-ワンタイムパスワード生成
--ワンボタン
--キーパッド
-One Driveの共有(URL)のような機能で利用されることが多い。
--URIのトークン(QueryStringのパラメタセット)が含まれている。
--パラメタの 1 つにパラメタセットに対する署名がある。
--リソースへのクライアントのアクセス方法を示す(認可)。

***ソフト [#n6f91d9b]
-基本的に、ポータルなどから入手することが多いが、~
プログラムから、SASトークンを生成することもできる。~
(必要なパラメタセットを署名することで生成できる)

**その他 [#r7f60170]
***CSRF対策用トークン [#q7727519]
CSRFを防止するための単なる乱数もトークンと呼んだりする。
-認証・認可用ではないが、CSRFを防止するための単なる乱数もトークンと呼ぶ。
-正規のリクエストなのか、攻撃者のリクエストなのかを判断できる。

-参考
--Webセキュリティの小部屋
---CSRF の安全なトークンの作成方法~
https://www.websec-room.com/2013/03/05/431
---CSRF の安全なトークンの作成方法(PHP編)~
https://www.websec-room.com/2013/03/05/443
---CSRF の安全なトークンの作成方法(ASP.NET,C#,VB.NET編)~
https://www.websec-room.com/2013/03/05/451
*用語 [#z3b25ede]
[[認証・認可プロトコルのトークン>#ga0b7270]]の用語。

※ [[セキュリティ トークン>#pa932cd4]]にはあまり難しい用語は無い。

**クレーム(クレームセット) [#b5414871]
-対象となるエンティティ("サブジェクト")に関する事実の情報
-クレームの集合が、クレームセットになる。

**アサーションとトークン [#efc85f9f]
-以下の様な標準仕様を見ると、

--Assertions and Protocols for the OASIS SAMLV2.0

--RFC 7519 - JSON Web Token (JWT)

-それぞれ、以下のように定義されている。

--[[トークン>#if523ce8]] :~
「複数の[[クレーム(クレームセット)>#b5414871]]」を格納する「[[アサーション>#xbeb945f]]」

--[[トークン>#if523ce8]]・プロファイル :~
「[[アサーション>#xbeb945f]]」のフォーマット

-・・・従って、「[[アサーション>#xbeb945f]]」≒「[[トークン>#if523ce8]]」らしい。

***アサーション [#xbeb945f]
≒ 表明:(自分の考え・決意などを、)はっきりあらわし示すこと。~
プログラムの前提として満たされるべき条件を記述するもの。

-複数の[[クレーム(クレームセット)>#b5414871]]から構成され、

--何らかの対象に関する属性や設定などの情報を列挙した、データ集合を指す場合が多い。

--認証・認可では、単なる属性ではなく、認証ユーザのIDや資格・権限情報、~
その他の属性情報の表明のためのデータ集合として使用される。

--標準化された技術仕様において、~
適用場面の限られたオプション仕様などのことをプロファイルということがある。

-以下、RFC7521からの引用。
--セキュリティドメイン間でIDとセキュリティ情報の共有を容易にする情報のパッケージ
--アサーションには、通常、以下のような情報が含まれる。
---主体または主体に関する情報
---アサーションを発行した当事者に関する情報
---およびアサーションが発行された日時
---およびアサーションが有効であるとみなされる条件~
(たとえば、いつどこで使用できるかなど)

--用語
---発行者~
アサーションを作成し、署名し、完全性保護するエンティティ
---依拠当事者~
アサーションを消費し、その情報に依存するエンティティ

***トークン [#oe033372]
上記の文脈上からは、

-先ず、[[SAML]][[アサーション>#xbeb945f]]や[[JWT]][[アサーション>#xbeb945f]]などの標準仕様があり、~

-それを[[SAML]]や[[OAuth]]、[[OpenID Connect]]で使用する際の~
オプション仕様を、「トークン・プロファイル」と言う。

ざっくり、[[アサーション>#xbeb945f]]を実際に使うとトークン。

解り易いのが、[[JWT]][[アサーション>#xbeb945f]]をアクセストークンとして使用する例。

*参考 [#c637467b]
以下の様な、多様なトークンがある。

**セキュリティ トークン [#la7931c0]
-セキュリティトークンの種類を学ぼう|株式会社テリロジー~
http://www.terilogy.com/product/vasco/token_type.html

-セキュリティトークン - Wikipedia > 3.トークンのタイプ~
https://ja.wikipedia.org/wiki/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3#.E3.83.88.E3.83.BC.E3.82.AF.E3.83.B3.E3.81.AE.E3.82.BF.E3.82.A4.E3.83.97

**[[JWT]] [#fd775748]
**認証・認可プロトコルのトークン [#r16cd84c]

**[[CWT]] [#oa2f2501]

**[[SAML]] [#q3cc7c76]

**サンプルコード [#id12d1eb]
***[[JWT]] [#fd775748]
***[[CWT]] [#oa2f2501]
***[[SAML]] [#q3cc7c76]
***サンプルコード [#id12d1eb]
-cose-wg/COSE-csharp: COSE Implementation using C#~
https://github.com/cose-wg/COSE-csharp

**その他 [#e62555e6]

***SASトークン [#c4830d1b]
-Shared Access Signatures (SAS) でデータの制限付きアクセスを付与する - Azure Storage | Microsoft Docs~
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-sas-overview

***CSRF対策用トークン [#bd7bfae4]
-Webセキュリティの小部屋
--CSRF の安全なトークンの作成方法~
https://www.websec-room.com/2013/03/05/431
--CSRF の安全なトークンの作成方法(PHP編)~
https://www.websec-room.com/2013/03/05/443
--CSRF の安全なトークンの作成方法(ASP.NET,C#,VB.NET編)~
https://www.websec-room.com/2013/03/05/451


----
Tags: [[:セキュリティ]], [[:認証基盤]], [[:暗号化]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS