Open棟梁Project - マイクロソフト系技術情報 Wiki
外部ログイン・プロバイダを使用して外部ログインを簡単に実装できるが、
(プロトコルを理解してライブラリを自作するより数段楽ではあるものの)
実際は、そんなに簡単ではなかったりする。
外部ログイン・プロバイダの使用するクレームベース認証は、
現時点では、OAuth(正確には、OAuth2.0)が主流である模様。
その他、OpenID Connectに対応したライブラリも拡充しつつある。
Microsoftは、「support the Microsoft Account authentication workflow」とプロトコルを明言していない。
今の所、OAuth 2.0を使用しているもよう。
今の所、OAuth 2.0を使用しているもよう。
今の所、OAuth 2.0を使用しているもよう。
Microsoft.Web.WebPages?.OAuth.OAuthWebSecurity? クラスには、
各サービスに応じて、アカウント認証を行うためのメソッドが用意されている。
項番 | メソッド | 処理内容 |
1 | RegisterFacebookClient? | Facebook アカウントによる認証 |
2 | RegisterGoogleClient? | Google アカウントによる認証 |
3 | RegisterLinkedInClient? | LinkedIn? アカウントによる認証 |
4 | RegisterMicrosoftClient? | Microsoft アカウントによる認証 |
5 | RegisterTwitterClient? | Twitter アカウントによる認証 |
6 | RegisterYahooClient? | Yahoo アカウントによる認証 |
Microsoft.Owin.Security.OpenIdConnect?では、
Azure Active Directoryとの、OpenID Connect使用した認証連携がサポートされている模様。
Googleへのログインは現時点(2016年)ではサポートされていない模様。
以下の手順に従い、実装できる。
サービス側の
トラブる事が多い。
また、過去GoogleのOpenIDの外部ログイン・プロバイダが存在しており、最近OAuthに置き換えられたことを考えると、
将来的には、OAuthが、OpenID Connectに置き換えられる。などと言った可能性はある。
ほぼ、AccountController?.ExternalLoginCallback?周辺で完結する。
既定ではClaimの保存処理は実装されていないので自分で実装する必要がある。
await UserManager.AddClaimAsync(user.Id, claim);
-----(引用)-----
さて、上記の Startup.Auth.cs で追加した External Login の Claim も、同様にデータベースに保持しておかないと以降の処理で参照できません。この設定をおこなうには、例えば、Controllers/AccountController?.cs の ExternalLoginConfirmation? に下記太字の通り追記して、External Login の Claim も保存します。ここでは、強制的に External Login で取得した Claim をデータベースに (Claim として) 保持していますが、上図のように UI で確認してから登録させるような実装も可能でしょう。なお、ここで登場する External Cookie は、この ExternalLoginConfirmation? と同時に消されてしまうので、この永続化の処理は、必ずこのタイミングで実行してください。(以降の処理で External Login の Claim を参照することはできません。)
-----(引用)-----
外部ログインした後に、E-mailアドレスを使用してユーザ登録すると、
ユーザIDの重複で、サインアップによりパスワード登録ができないため
通常ログインができなくなるという問題(?)もある。
※ 先に、サインアップして、後で外部ログインを追加すればこの問題は起きない。
ExternalLoginCallback?の条件分岐で、外部ログインがある時とない時で動きが違う。
別のログイン手段を持たない場合は、外部ログインを削除できない仕様である模様(確認済)。
Tags: :ASP.NET, :ASP.NET MVC, :ASP.NET SPA, ASP.NET Web API, :ASP.NET Identity