Open棟梁Project - マイクロソフト系技術情報 Wiki
外部ログイン・プロバイダを使用して外部ログインを簡単に実装できるが、
(プロトコルを理解してライブラリを自作するより数段楽ではあるものの)
実際は、そんなに簡単ではなかったりする。
外部ログイン・プロバイダとして使用可能なクレームベース認証のプロトコルには、以下のようなものがある。
現時点では、OAuth(正確には、OAuth 2.0)が主流である模様。
その他、OpenID Connectに対応したライブラリも拡充しつつある。
Microsoft.Owin.Security.Googleでは、過去にOpenIDを使用していた。
WIF (Windows Identity Foundation) によってサポート可能と思われる。
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年)ではサポートされていない模様。
WIFの名前空間は、Microsoft.IdentityModel?.Claimsと、
OWINミドルウェア(Microsoft.Owin)と異なるため、ASP.NET Identityとの連携度が不明。
以下の手順に従い、実装できる。
サービス側の
トラブる事が多い。
以下のように、インターフェイスの変更が多数あったことが報告されている。
また、過去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 を参照することはできません。)
-----(引用)-----
外部ログインが失敗することがあるらしい。
Tags: :ASP.NET, :ASP.NET MVC, :ASP.NET SPA, ASP.NET Web API, :ASP.NET Identity