Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

汎用認証サイト(Multi-purpose Authentication Site)の独自仕様部分について説明する。

Idp仕様

概要

Idpの仕様については概ね、ASP.NET Identityに準拠。

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

カスタマイズ・ポイント

マルチテナント化スイッチ

RequireUniqueEmail?スイッチ

デバッグ用スイッチ

利用するサービス

外部ログイン

オンライン決済サービス

通知プロバイダ

ユーザ・アカウント

主要属性

永続化

スキーマ

DDL

Githubをポイント予定

編集処理

サインアップ・サインイン

サインアップとE-mailアドレス確認

サインイン・サインアウト

通常通り。

パスワード・リセット

アカウント編集

パスワード

外部ログイン

外部ログインの一覧表示と追加・削除

電話番号

二要素認証 (2FA)

二要素認証 (2FA) のON/OFF

オンライン決済サービス

クレジット・カードの登録

, etc. (任意項目を追加可能)

二要素認証

有効化

アカウント編集にて有効化

他のブラウザでテスト

運用

アカウント・ロックアウト

指定回数、ログインをミスすると、指定時間ロックアウトされる。

パスワード・リセット

SecurityStamp?

外部ログイン仕様

概要

概ね、ASP.NET Identityに準拠。

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

カスタマイズ・ポイント

外部ログイン処理の仕様について。

外部ログイン・サービス

外部ログインでサインアップ

サインアップを外部ログインで行った場合、

外部ログインでサインイン

外部ログインの一覧と削除

外部ログインの詳細

ExternalLoginCallback?の条件分岐

OAuth 2.0 Server仕様

概要

概ね、ASP.NET Identityに準拠。

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

共通

Server側

Client側

Access Token

クライアント認証

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

クライアント識別子

ユーザ認証

Server側

Client側

ResourceServer?のWebAPI

パラメタ化

Idp

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" />

外部ログイン

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

を設定できる。

<!-- 外部ログインの追加時に 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?

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

OAuth 2.0 Server

共通設定

Server側エンドポイント

Client側エンドポイント

 <!-- 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"

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