Digital Identity 技術

Authentication = 「認証」(本人確認), Authorization = 「認可」(リソースへのアクセス許可). Authorization Endpoint は「認可エンドポイント」. Authentication Request は「認証要求」.

Webサービスその他での伝統的なユーザID + パスワードによる認証では、当然にそのサービスの認可を兼ねることが通常なので、用語が混乱しやすい。Open ID Connect などの技術は、本人確認だけを別サーバに分離する。

認証関係: サンプルプログラム OpenID Connect OP (IdP) 実装サンプル, 2FA sample.

OpenID Connect 'response_type' and flows Authorization Request (認証要求) に含まれる response_type で、フローが決定される。有効な組み合わせについて。

Ruby on Rails の認証フレームワーク Sorcery がシンプルでよさそう。

OpenID Connect

OpenID Connect は, OAuth 2.0 認可仕様の上に構築された認証 (authentication) 手順。認可 (authorization) とは異なる。

ただの OAuth 2.0 を「認証」に使おうとすると、セキュリティ上よくない。例えば, 単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる | @_Nat Zone OAuth 2.0 の implicit flow を使って「認証」をしようとすると、とっても大きな穴が開きます。カット & ペースト攻撃が可能だからです。

各社が OAuth 2.0 の上に独自に認証の仕組みを作っていた。これでは困るので, 標準化したものが OpenID Connect. 'OpenID 2.0' (OpenID Authentication 2.0) からの技術的な連続性はない。名前だけ。紛らわしい。

OpenID Connect に対応した認証サービス (OpenID Provider; OP) は、例えば、次がある;

組織 サービス Basic OP Implicit OP Hybrid OP
Google Google Federated Identity
Microsoft ADFS on Windows Server 2016 --
Microsoft Azure Active Directory v2 --
PayPal Login with PayPal ※下コメント参照.
Salesforce Summer 2015 Release
Yahoo! Japan Yahoo! ID Federation v2

リストはこちら; OpenID Certification. Facebook がないのがつらい。引き続き独自の方法で対応が必要。

Salesforce は, 実際に試せてはいないが, この辺りの記事を見ると OP になれるようだ; シングルログアウト用の OpenID Connect 設定 (Salesforce が OpenID Connect プロバイダの場合) | シングルサインオン実装ガイド

(2017.9.23) このほか, gitlab.com も OpenID Provider のつもりだが, jwks_uri で得られるRSA公開鍵が不味く, 適合していない。

(2017.8.20 追記) 上のリストで PayPal も OpenID Connect に対応していることになっているが、実装を確認する限り、OpenID Connect には適合していない。

この辺のやりとりとか, amazon web services - Using Login with Paypal and using OpenID with AWS Cognito - Stack Overflow. このやりとりでも; oauth 2.0 - PayPal id_token verification - Stack Overflow

いろいろ試してみたが、access_token と別に id_token を取得することができなかった。

Links

公開鍵基盤 (PKI)

CA階層, 2/3 tierと基礎 CA.plスクリプトの解説はこちら。

2 tierプライベート認証局を作る

プライベート認証局でSSLサーバ証明書, nginxでの TLS設定

SSLクライアント証明書でユーザ認証 (nginx)

S/MIME @todo

コード署名 (Code signing) Windows環境 (UWP) では, バイナリに署名しないと実行できなくなっている.