「Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
多用途認証サイト(Multi-purpose Authentication Site)?の独自仕様部分について説明する。
Idpの仕様については概ね、ASP.NET Identityに準拠。
ASP.NET Identity側の仕様については、「ASP.NET Identity」を参照。
Githubをポイント予定
通常通り。
外部ログインの一覧表示と追加・削除
二要素認証 (2FA) のON/OFF
クレジット・カードの登録
アカウント編集にて有効化
指定回数、ログインをミスすると、指定時間ロックアウトされる。
概ね、ASP.NET Identityに準拠。
ASP.NET Identity側の仕様については、「ASP.NET Identityの外部ログイン」を参照。
外部ログイン処理の仕様について。
サインアップを外部ログインで行った場合、
ExternalLoginCallback?の条件分岐
概ね、ASP.NET Identityに準拠。
については、「ASP.NET IdentityによるSTS実装」を参照。
claimsIdentity.AddClaim(new Claim("urn:oauth:scope", xxxxx));
ここでのクライアントとは、ユーザではなく、OAuth 2.0 のClientを指しているので注意する。
ASP.NET Identityや、その他、アプリケーションで使用するパラメタについて。
<!-- 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" />
以下のように各、外部ログイン・プロバイダの
を設定できる。
<!-- 外部ログインの追加時に 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をサポートしないことがある。
XsrfKey?は、XSRF = CSRFを防ぐためのstateパラメタの生成に使用される。
stateパラメタは暗号化によって生成されるので、XsrfKey?自体が露見することはない。
従って、この値としても、無作為な値を使用する必要はない。
<!-- 共通設定 --> <add key="EquipOAuthServer" value="true" />
<!-- プロパティ --> <add key="AllowOAuthInsecureHttpEndpoints" value="true" /> <add key="OAuthAuthorizeEndpointCanDisplayErrors" value="true" /> <add key="OAuthAccessTokenExpireTimeSpanFromMinutes" value="360" /> <add key="OAuthRefreshTokenExpireTimeSpanFromDays" value="14" />
<!-- JWT --> <add key="OAuthIssuerId" value="http://jwtssoauth.opentouryo.com" /> <!-- JWTの署名に使用する X.509 証明書に関するパラメタ --> <add key="OAuthJWTPassword" value="xxxxx" /> <add key="OAuthJWT_pfx" value="XXXXX_RS256.pfx" /> <add key="OAuthJWT_cer" value="XXXXX_RS256.cer" />
<!-- Grant Typeの有効・無効 --> <add key="EnableResourceOwnerCredentialsGrantType" value="true" /> <add key="EnableClientCredentialsGrantType" value="true" /> <add key="EnableRefreshToken" value="true" />
<!-- AuthorizationServerエンドポイント --> <add key="OAuthAuthorizationServerEndpointsRootURI" value="http://localhost:nnnnn/MultiPurposeAuthSite" /> <!-- 認可エンドポイント --> <add key="OAuthAuthorizeEndpoint" value="/Account/OAuthAuthorize" /> <!-- Tokenエンドポイント --> <add key="OAuthBearerTokenEndpoint" value="/OAuthBearerToken" />
<!-- ResourceServerエンドポイント --> <add key="OAuthResourceServerEndpointsRootURI" value="http://localhost:nnnnn/MultiPurposeAuthSite" /> <add key="OAuthAuthenticateUserWebAPI" value="/api/OAuthResourceApi/AuthenticateUser" /> <add key="OAuthGetUserClaimWebAPI" value="/api/OAuthResourceApi/GetUserClaim" />
<!-- Client --> <!-- Clientエンドポイント --> <add key="OAuthClientEndpointsRootURI" value="http://localhost:nnnnn/MultiPurposeAuthSite" /> <!-- Redirectエンドポイント --> <!-- - test_self_code : Authorization Codeグラント種別 --> <add key="OAuthAuthorizationCodeGrantClient" value="/Account/OAuthAuthorizationCodeGrantClient" /> <!-- - test_self_token : Implicitグラント種別 --> <add key="OAuthImplicitGrantClient" value="/Account/OAuthImplicitGrantClient" />
以下をツールを使用して生成して、登録する。
<!-- クライアント識別子 (client_id, client_secret, redirect_uri) --> <add key="OAuthClientsInformation" value=' { "-guid(client_id)-": { "client_secret": "-乱数-", "redirect_uri_code": "test_self_code", "redirect_uri_token": "test_self_token", "client_name": "TestUser" }, "-guid(client_id)-": { "client_secret": "-乱数-", "redirect_uri_code": "http://hogehoge0/aaa", "redirect_uri_token": "http://hogehoge0/bbb", "client_name": "hogehoge0" }, "-guid(client_id)-": { "client_secret": "-乱数-", "redirect_uri_code": "http://hogehoge1/aaa", "redirect_uri_token": "http://hogehoge1/bbb", "client_name": "hogehoge1" }, "-guid(client_id)-": { "client_secret": "-乱数-", "redirect_uri_code": "http://hogehoge2/aaa", "redirect_uri_token": "http://hogehoge2/bbb", "client_name": "hogehoge2"