Open棟梁Project - マイクロソフト系技術情報 Wiki
ASP.NET Identityはクレームベース認証をサポートしている。
この処理は、SPAテンプレートの以下のエンドポイントに実装されている。
これにより、JavaScript などの「非 .NET 環境」と連携させることもできる。
ここでは、以下のような前提のアプリケーションを構築するサンプルを示す。
#ref(): File not found: "goal.png" at page "ASP.NET IdentityのToken 認証"
Install-Package Microsoft.AspNet.WebApi Install-Package Microsoft.AspNet.WebApi.Owin Install-Package Microsoft.AspNet.WebApi.Cors
Providers フォルダを作成し、以下の ApplicationOAuthProvider?.cs を作成する。
namespace [名前空間名].Providers { public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider { private readonly string _publicClientId; public ApplicationOAuthProvider(string publicClientId) { if (publicClientId == null) { throw new ArgumentNullException("publicClientId"); } _publicClientId = publicClientId; } public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context) { if (context.ClientId == _publicClientId) { Uri expectedRootUri = new Uri(context.Request.Uri, "/"); if (expectedRootUri.AbsoluteUri == context.RedirectUri) { context.Validated(); } else if (context.ClientId == "web") { var expectedUri = new Uri(context.Request.Uri, "/"); context.Validated(expectedUri.AbsoluteUri); } } return Task.FromResult<object>(null); } } }
「// 以下、追加部分」~「// ここまで」の範囲。
public partial class Startup { // 以下、追加部分 // アプリケーションによる OAuthAuthorization の使用を有効にします。その後に Web API を保護できます static Startup() { PublicClientId = "web"; OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString("/Token"), AuthorizeEndpointPath = new PathString("/Account/Authorize"), Provider = new ApplicationOAuthProvider(PublicClientId), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), AllowInsecureHttp = true }; } public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; } public static string PublicClientId { get; private set; } // ここまで // 認証設定の詳細については、http://go.microsoft.com/fwlink/?LinkId=301864 を参照してください public void ConfigureAuth(IAppBuilder app) { // 1 要求につき 1 インスタンスのみを使用するように DB コンテキスト、ユーザー マネージャー、サインイン マネージャーを構成します。 app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); // アプリケーションが Cookie を使用して、サインインしたユーザーの情報を格納できるようにします // また、サードパーティのログイン プロバイダーを使用してログインするユーザーに関する情報を、Cookie を使用して一時的に保存できるようにします // サインイン Cookie の設定 app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), Provider = new CookieAuthenticationProvider { // ユーザーがログインするときにセキュリティ スタンプを検証するように設定します。 // これはセキュリティ機能の 1 つであり、パスワードを変更するときやアカウントに外部ログインを追加するときに使用されます。 OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>( validateInterval: TimeSpan.FromMinutes(30), regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) } }); app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); // 2 要素認証プロセスの中で 2 つ目の要素を確認するときにユーザー情報を一時的に保存するように設定します。 app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5)); // 2 つ目のログイン確認要素 (電話や電子メールなど) を記憶するように設定します。 // このオプションをオンにすると、ログイン プロセスの中の確認の第 2 ステップは、ログインに使用されたデバイスに保存されます。 // これは、ログイン時の「このアカウントを記憶する」オプションに似ています。 app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie); // 以下、追加部分 // アプリケーションがベアラ トークンを使用してユーザーを認証できるようにします app.UseOAuthBearerTokens(OAuthOptions); // ここまで // 次の行のコメントを解除して、サード パーティのログイン プロバイダーを使用したログインを有効にします //app.UseMicrosoftAccountAuthentication( // clientId: "", // clientSecret: ""); //app.UseTwitterAuthentication( // consumerKey: "", // consumerSecret: ""); //app.UseFacebookAuthentication( // appId: "", // appSecret: ""); //app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() //{ // ClientId = "", // ClientSecret = "" //}); } }
Models フォルダに、クレームを返すための ClaimViewModel?.cs を作成する。
Tags: :ASP.NET, :ASP.NET Identity
Special thanks go to maegawa-san for his support.