Open棟梁 wiki

目次

概要

Multi-AuthSystem?独自仕様部分について説明する。

Idp仕様

Idpの使用について。

概要

概ね、ASP.NET Identityに準拠。

ASP.NET Identity側の仕様については、「ASP.NET Identity」を参照。

カスタマイズポイント

ユーザアカウント

UserStore?

パラメタ化

ASP.NET Identityや、その他、アプリケーションで使用するパラメタについて。

SecurityStamp?

<!-- SecurityStamp(検証間隔は10秒、本番は長めに設定-->
<add key="SecurityStampValidateIntervalFromSeconds" value="10" />

ユーザ名と、その検証

<!--ユーザ名検証(ユーザ名は、E-mail-->
<add key="AllowOnlyAlphanumericUserNames" value="false" />
<add key="RequireUniqueEmail" value="true" />

パスワード検証

<!--パスワード検証(8文字以上の大文字・小文字、数値、記号-->
<add key="RequiredLength" value="8" />
<add key="RequireNonLetterOrDigit" value="true" />
<add key="RequireDigit" value="true" />
<add key="RequireLowercase" value="true" />
<add key="RequireUppercase" value="true" />

ユーザ ロックアウト

<!--ユーザ ロックアウト(5 回入力ミスすると、5分ロックアウト-->
<add key="UserLockoutEnabledByDefault" value="true" />
<add key="DefaultAccountLockoutTimeSpanFromSeconds" value="300" />
<add key="MaxFailedAccessAttemptsBeforeLockout" value="5" />

二要素認証

<!-- 二要素認証(2FA:TwoFactorAuthentication)-->
<!-- 必要に応じてユーザが有効にするので初期値は false -->
<add key="TwoFactorEnabled" value="false" /> 
<!-- Cookieの有効期限は二週間 24 * 14 = 336 時間 -->
<add key="TwoFactorCookieExpiresFromHours" value="336" />

外部認証仕様(≒ OAuth 2.0 Client仕様)

「≒」としたのは、外部認証の主要プロトコルがOAuth 2.0であって、
今後、OpenID Connectなどの他のプロトコルに置き換えられていく可能性があるため。

概要

概ね、ASP.NET Identityに準拠。

ASP.NET Identity側の仕様については、「ASP.NET Identityの外部ログイン」を参照。

カスタマイズ・ポイント

外部認証処理の仕様について。

パラメタ化

以下のように各、外部ログイン・プロバイダの(OAuth等)の

を設定できる。

<!-- 外部ログインの追加時に XSRF の防止 -->
<add key="XsrfKey" value="(サイト毎にで変更する、公開しないこと)" />
 
<!--外部ログイン(MicrosoftAccountAuthentication)-->
<add key="MicrosoftAccountAuthentication" value="true" />
<add key="MicrosoftAccountAuthenticationClientId" value="・・・" />
<add key="MicrosoftAccountAuthenticationClientSecret" value="・・・" />
 
<!--外部ログイン(GoogleAuthentication)-->
<add key="GoogleAuthentication" value="true" />
<add key="GoogleAuthenticationClientId" value="・・・" />
<add key="GoogleAuthenticationClientSecret" value="・・・" />
 
<!--外部ログイン(FacebookAuthentication)-->
<add key="FacebookAuthentication" value="true" />
<add key="FacebookAuthenticationClientId" value="・・・" />
<add key="FacebookAuthenticationClientSecret" value="・・・" />

設定値の取得方法など

クライアント識別子は、外部ログイン・サービスの管理画面から取得する。

合わせてここでRedirectエンドポイントの設定などを行う必要がある。
これは、外部ログイン・サービス毎に設定方法が異なるので注意する。

例えばマイクロソフト・アカウントでは、以下の様な設定を行う。、

https://fqdnname:nnnnn/signin-microsoft

外部ログイン・サービスによっては、
httpやlocalhostをサポートしないことがある。

マイクロソフト・アカウントでは、部分一致をサポートしており、
Redirectエンドポイントの以降のパスはredirect_uriから指定する。

外部ログインは、HttpUnauthorizedResultActionResult?を返すことで開始する。
redirect_uriはHttpUnauthorizedResult?のコンストラクタから指定できる。

XsrfKey?

XsrfKey?は、XSRF = CSRFを防ぐためのstateパラメタの生成に使用される。
stateパラメタは暗号化によって生成されるので、XsrfKey?自体が露見することはない。
従って、この値としても、無作為な値を使用する必要はない。

OAuth 2.0 Server仕様

概要

概ね、ASP.NET Identityに準拠。

ASP.NET Identity側の仕様については、「ASP.NET IdentityによるSTS実装」]]」を参照。

ASP.NET Identity側の仕様については、「[[ASP.NET Identity追加仕様>]]」を参照。

共通

Server側

Client側

Access Tokenへの情報格納方法

ClaimsIdentity?を使用する。以下のようなURN形式をkeyに使用してvalueの追加を行う。

クライアント認証

ここでのクライアントとは、OAuth 2.0 のClientを指しているので注意する。

クライアント識別子

ユーザ認証

Server側

Client側

ResourceServer?のWebAPI

パラメタ化

共通設定

<add key="EquipOAuthServer" value="true" />
<add key="OAuthIssuerId" value="IssuerId:サイト毎にGUIDの32文字を生成して設定" />
<add key="AllowOAuthInsecureHttpEndpoints" value="true" />
<add key="OAuthAuthorizeEndpointCanDisplayErrors" value="true" />
<add key="OAuthAccessTokenExpireTimeSpanFromMinutes" value="360" />

Server側エンドポイント

Multi-AuthSystem?が保有するエンドポイントなで、相対パスで良い。

<!-- 認可エンドポイント -->
<add key="OAuthAuthorizeEndpoint" value="/Account/OAuthAuthorize" />
<!-- Tokenエンドポイント -->
<add key="OAuthBearerTokenEndpoint" value="/OAuthBearerToken" />
<!-- ResourceServerエンドポイント -->
<add key="OAuthAuthenticateAPI" value="/api/OAuthResourceApi/Authenticate" />
<add key="OAuthAuthorizedUserClaimAPI" value="/api/OAuthResourceApi/GetAuthorizedUserClaim" />

Client側エンドポイント

Clientだが、Multi-AuthSystem?が保有するセルフRedirectエンドポイントなので、相対パスで良い。

<!-- Redirectエンドポイント -->

<!--  - self_code : Authorization Codeグラント種別 -->
<add key="OAuthAuthorizationCodeGrantClient" value="/Account/OAuthAuthorizationCodeGrantClient" />

<!--  - self_token : Implicitグラント種別 -->
<add key="OAuthImplicitGrantClient" value="/Account/OAuthImplicitGrantClient" />

クライアント認証用の識別子登録

<!-- クライアント識別子 (client_id, client_secret, redirect_uri) -->
<add key="OAuthClientsInformation" value='
  {
    "client_idとしてサイト毎にGUIDの32文字を生成して設定": {
   "client_secret": "サイト毎にGUIDの32文字を生成して設定",
   "redirect_uri": "self_code"
    },
    "client_idとしてサイト毎にGUIDの32文字を生成して設定": {
   "client_secret": "サイト毎にGUIDの32文字を生成して設定",
   "redirect_uri": "self_token"
    },
    "client_idとしてサイト毎にGUIDの32文字を生成して設定": {
   "client_secret": "サイト毎にGUIDの32文字を生成して設定",
   "redirect_uri": "self_token_web"
    },
    "client_idとしてサイト毎にGUIDの32文字を生成して設定": {
   "client_secret": "サイト毎にGUIDの32文字を生成して設定",
   "redirect_uri": "self_token_mob:アプリ間連携用URI"
    },
    "client_idとしてサイト毎にGUIDの32文字を生成して設定": {
   "client_secret": "サイト毎にGUIDの32文字を生成して設定",
   "redirect_uri": "http://hogehoge/・・・"
    },
   ・・・
  }
  ' />

セルフRedirectエンドポイント

テスト用のRedirectエンドポイントだが、
スマホネイティブの認証などでサイトを構築せず利用可能。

self_code

"redirect_uri": "self_code"

self_token, self_token_web

"redirect_uri": "self_token"
"redirect_uri": "self_token_web"

self_token_mob

"redirect_uri": "self_token_mob"


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