Open棟梁 wiki
目次 †
概要 †
- Multi-AuthSystem?と略してしまったので、多要素認証と間違いそうだが、これは、
Multi-purpose Authentication System(汎用 認証Webサイト)の略なので注意。
機能 †
基本機能 †
サインアップ †
サインイン †
サインアウト †
アカウント編集 †
サインアップの機能強化 †
ユーザ名の重複不可設定 †
パスワード検証 †
2要素認証 †
以下で使用される。
- アカウント確認(E-mail confirmation)
- アカウント編集(電話番号、SMS)
- パスワード・リセット(E-mail)
アカウント確認(E-mail confirmation) †
サインインの機能強化 †
運用の機能強化 †
アカウント・ロックアウト †
パスワード・リセット †
管理機能 †
- 注
- 編集可能なユーザ属性が少ない(現状、Name = E-mailのみ編集可能)
- データ量が多い場合に耐えられない実装になっている(ページング実装無し)。
- マルチテナント対応の無い実装になっている。
独自仕様部分 †
Idp仕様 †
UserStore? †
- EntityFramework?をキャンセルしUserStore?クラスで実装。
- Open棟梁のデータアクセスで実装。
- DBMSはSQL Server or PostgreSQLを使用。
パラメタ †
外部認証仕様 †
- 連携したe-mail addressは検証しない。
OAuth2.0 Server仕様 †
Multi-AuthSystem?独自仕様 †
- 認証に利用する場合、以下を守る。
- ResourceServer?に認証のAPIを提供する。
- 必ず、Authorization Codeグラント種別を使用する。
- scopeパラメタにauthenticationを指定する。
- Access Tokenにscopeパラメタの内容とクライアント識別子を格納する。
- ResourceServer?にAccessするときAccess Tokenに加えクライアント識別子をPOSTで送信する。
- Access Tokenに情報を格納する際は、ClaimsIdentity?を使用する。
Claimには、以下のようなURN形式をkey使用してvalueの追加を行う。
- scope(scopeは「;」区切り)
claimsIdentity.AddClaim(new Claim("urn:oauth:scope", scope));
- identifier(client_id, client_secretは「;」区切り)
claimsIdentity.AddClaim(new Claim("urn:oauth:identifier", identifier));
- クライアント識別子
- GUIDを使用する({}, - あり)
- client_id
全てのグラント種別以外で必須
- client_secret
Implicitグラント種別以外で必須
- Redirectエンドポイント
以下のグラント種別で必須(部分一致は不可)
- Authorization Codeグラント種別
- Implicitグラント種別
メモ †
詳しくはコチラを参照。
ExternalLoginCallback?の条件分岐 †
- 外部ログインの成否
- 外部ログインの有・無
- 外部ログインがある→そのままサインイン(正常終了)
- 外部ログインがない→外部ログインの作成、(3)へ。
- 外部ログインの作成
- 当該ユーザが既にサインアップされている。
→ 外部ログインを追加してサインイン(正常終了)
- 当該ユーザが未だサインアップされていない。
→ サインアップ後に外部ログインを追加してサインイン(正常終了)
#外部ログイン追加、サインアップ、サインインの成否は省略。
外部ログイン削除のテストケース †
- サインアップ→サインアップ済みの状態から外部ログイン
- 内部ログイン→内部ログアウト
- 外部ログイン追加(外部ログイン)→外部ログアウト
- 外部ログイン→外部ログイン削除→★→外部ログアウト
- 外部ログイン追加(外部ログイン)→外部ログアウト
- 外部ログイン→外部ログイン削除→★→外部ログアウト
- 内部ログイン→内部ログアウト(外部ログイン削除後も、内部ログインは可能)
- サインアップせずに、外部ログイン
- 外部ログイン追加(外部ログイン)→外部ログアウト
- 外部ログイン→☆外部ログイン削除→外部ログアウト
- 外部ログイン追加(外部ログイン)→外部ログアウト
- ★の外部ログイン削除後のタイミングで、ログアウトしていないのは、
代替のログイン手段を持っているため問題無いという認識。
- ☆サインアップしていない場合に、外部ログインの削除ができなかった。
(削除によりログイン手段を持たない状態になるのに、ログインしている状態になってしまうため)
試しに外部ログイン✕2の状態でテストした所、外部ログインの削除が可能であることを確認できた。
他サイトとの連携機能 †
.NET †
ASP.NET Identityを使用して連携できる(データストアは共有する)。
その他 †
前述の「セキュアトークンサービス(STS)」を使用して連携する。