加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 我应该如何使用Identity 2.0和WebAPI 2.1以及Owin 2

发布时间:2020-12-16 03:23:35 所属栏目:asp.Net 来源:网络整理
导读:我正在使用 同一域上的新浏览器客户端 Identity 2.0 WebAPI 2.1 Owin 2.1 AngularJS前端用于注册,登录和数据显示 在具有AngularJS前端的WebAPI应用程序中. 我正在阅读令牌认证,但我现在很困惑,我找不到任何使用我的组合的好例子.我想知道的是我应该使用cooki
我正在使用

>同一域上的新浏览器客户端
> Identity 2.0
> WebAPI 2.1
> Owin 2.1
> AngularJS前端用于注册,登录和数据显示

在具有AngularJS前端的WebAPI应用程序中.

我正在阅读令牌认证,但我现在很困惑,我找不到任何使用我的组合的好例子.我想知道的是我应该使用cookie或令牌进行身份验证.我应该使用Userfactory还是CreatePerOwinContext?

这是我在Startup.Auth.cs中的内容

public partial class Startup {

        public void ConfigureAuth(IAppBuilder app) {

            app.CreatePerOwinContext(ApplicationDbContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);
            app.UseCookieAuthentication(new CookieAuthenticationOptions {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,LoginPath = new PathString("/"),Provider = new CookieAuthenticationProvider {
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager,ApplicationUser>(
                        validateInterval: TimeSpan.FromMinutes(30),regenerateIdentity: (manager,user) => user.GenerateUserIdentityAsync(manager))
                }
            });
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
            app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie,TimeSpan.FromMinutes(5));

            // Enables the application to remember the second login verification factor such as phone or email.
            // Once you check this option,your second step of verification during the login process will be remembered on the device where you logged in from.
            // This is similar to the RememberMe option when you log in.
            app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);
        }
    }

这是我的WebAPI配置:

public static class WebApiConfig
{
    public static void CustomizeConfig(HttpConfiguration config)
    {
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        var json = config.Formatters.JsonFormatter;
        json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
        json.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
        json.SerializerSettings.Converters.Add(new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-ddTHH:mmZ" });
    }

我看到了一些使用此代码的示例,但我不确定如何调用它:

OAuthOptions = new OAuthAuthorizationServerOptions
{
    TokenEndpointPath = new PathString("/Token"),Provider = new ApplicationOAuthProvider(PublicClientId,UserManagerFactory),AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),AllowInsecureHttp = true
};

我可以用这个替换cookie身份验证吗?

解决方法

不是专家,但在我的涉猎中我发现令牌非常适合api,从javascript到api,传统的cookie主要用于ui.根据您的尝试,其中任何一个或两个都可以工作.

您可以按照这样的链接执行api http://blog.iteedee.com/2014/03/asp-net-identity-2-0-cookie-token-authentication/的ui和令牌的cookie

app.CreatePerOwinContext(ApplicationSession.Create);
        app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);

        // Token Authentication
        app.USEOAuthBearerAuthentication(new OAuthBearerOptions());

我想如果你想要两者的承载,你可以将cookie认证选项认证类型设置为承载,但你必须使用它.令牌将位于“.AspNet.ExternalBearer”下的owincontext中.

我还认为如果你注册了Identity 2.0中间件,我认为它也注册了oauth中间件,所以你不需要自己注册oauthserver中间件.这是您发布的OAuthAuthorizationServerOptions代码.你不需要它.

如果ui和api分开,那么如果你想从ui传递到api做某种单点登录,那就更难了.我建议从thinktecture开始查看opensource身份服务器或授权服务器.

如果您在owin中间件和Identity 2.0上设置,则需要确保应用程序和api都可以读取令牌,您可能需要实现ISecureDataFormat.但请记住,解密并不意味着你可以100%信任一个令牌,它应该被签名和验证.取决于您的需求.

对不起,我想那是漫长的漫步……祝你好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读