マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

  • 外部ログイン(認証)の仕様の調査。
  • 前提知識に、OAuth 2.0 の知識を要する。

外部ログイン(認証)の仕様

外部ログインは、OAuth 2.0「Authorization Codeグラント種別」の拡張仕様になる。

  • 通常、OAuth 2.0では、Redirectエンドポイントには、仲介コードが返り、
    仲介コードをサーバ側でAccess Tokenに変換した後、Resources Serverへアクセスし、
    必要なResources(ここでは認証されたユーザのクレーム)を取り出して返すと言う流れになる。
  • しかし、外部ログインでは、Redirectエンドポイントに直接、このクレームが返る
    (外部ログイン・ライブラリ上で、仲介コード → Access Token → クレームへの変換処理をしている)。

ASP.NET Identity用のMicrosoftアカウントの外部ログイン・ライブラリの場合

動作を分析した所、

  • アプリケーションのCallbackのエンドポイントが、
    /Account/ExternalLoginCallback?

となっている。

HTTPSのため、仲介コード → Access Tokenの、Responseを確認できず、
OpenID Connectで実装されてる可能性もあると考えたが、
scopeパラメタに「openid」の値を確認できなかったので、OAuth 2.0拡張と思われる。

Redirectエンドポイント

仲介コード → Access Token → クレームへの変換処理を行っている模様。

  • Cookie:
    • ASP.NET_SessionId?=XXXXX
    • __RequestVerificationToken?=YYYYY
    • .AspNet?.Correlation.Microsoft=ZZZZZ1

Callbackのエンドポイント

この時点で情報は全て、.AspNet?.ExternalCookie?に同梱されるもよう。
(恐らく、クレームなどの情報の露見を防ぐためと思われる)

  • Cookie:
    • ASP.NET_SessionId?=XXXXX
    • __RequestVerificationToken?=YYYYY
    • .AspNet?.ExternalCookie?=ZZZZZ2

遷移元への遷移

認証後、遷移元へ遷移した後には、外部ログインの形跡は綺麗に消えている。

  • Cookie:
    • ASP.NET_SessionId?=XXXXX
    • __RequestVerificationToken?=YYYYY
    • .AspNet?.TwoFactorRememberBrowser?=ZZZZZ3
    • .AspNet?.ApplicationCookie?=ZZZZZ4

セキュリティに関する考慮点

以下をライブラリ内で処理することで、セキュリティを高くしている。

  • 外部ログインを、ライブラリ内部で処理して、
    • ユーザの実装ミスによる仲介コード、Access Token等の露見を防いでいる。
    • 長目のRequestVerificationToken?値を使用している。
  • Redirectエンドポイント→Callbackのエンドポイント間で、
    • 仲介コード、Access Token等が露見しないよう、エンドポイントを2段構成にしている。
    • エンドポイント間のインターフェイスにCookie(ExternalCookie?)を使用し、遷移後、直ちに削除している。

その他の事例・・・

参考

OAuthを認証に使用する場合のセキュリティに関する考察と、考慮点


Tags: :IT国際標準, :認証基盤, :ASP.NET Identity, :OAuth


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-10-09 (火) 22:15:58 (9d)