Web API 2 OWIN Bearer令牌的目的是什么?

 蚂蚁少校 发布于 2023-02-06 15:29

我试图了解MVC 5中单页应用程序模板中新的OWIN Bearer Token身份验证过程.如果我错了请更正我,对于OAuth密码客户端身份验证流程,承载令牌身份验证通过检查http授权请求标头来工作对于承载访问令牌代码,以查看请求是否经过身份验证,它不依赖cookie来检查特定请求是否经过身份验证.

根据这篇文章:

使用Web API示例进行OWIN承载令牌认证

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    using (IdentityManager identityManager = _identityManagerFactory.CreateStoreManager())
    {
        if (!await identityManager.Passwords.CheckPasswordAsync(context.UserName, context.Password))
        {
            context.SetError("invalid_grant", "The user name or password is incorrect.");
            return;
        }

        string userId = await identityManager.Logins.GetUserIdForLocalLoginAsync(context.UserName);
        IEnumerable claims = await GetClaimsAsync(identityManager, userId);
        ClaimsIdentity oAuthIdentity = CreateIdentity(identityManager, claims,
            context.Options.AuthenticationType);
        ClaimsIdentity cookiesIdentity = CreateIdentity(identityManager, claims,
            _cookieOptions.AuthenticationType);
        AuthenticationProperties properties = await CreatePropertiesAsync(identityManager, userId);
        AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
        context.Validated(ticket);
        context.Request.Context.Authentication.SignIn(cookiesIdentity);
    }
}

GrantReourceOwnerCredentials函数不仅使用以下行构成票证:context.Validated(ticket); 但它也组成了一个cookie标识,并使用以下行将其设置为cookie:context.Request.Context.Authentication.SignIn(cookiesIdentity);

所以我的问题是,这个函数中cookie的确切目的是什么?AuthenticationTicket不应该足够用于身份验证吗?

1 个回答
  • 在SPA模板中,实际上启用了两个单独的身份验证机制 - cookie身份验证和令牌身份验证.这样可以对MVC和Web API控制器操作进行身份验证,但需要一些额外的设置.

    如果您查看WebApiConfig.Register方法,您将看到以下代码行:

        config.SuppressDefaultHostAuthentication();
    

    这告诉Web API忽略cookie身份验证,这可以避免在您在问题中发布的链接中解释的一系列问题:

    "... SPA模板也将应用程序cookie中间件作为活动模式启用,以便启用其他方案,如MVC身份验证.因此,如果请求具有会话cookie但没有持票人令牌,Web API仍将被验证.这可能不是你的希望您对API的CSRF攻击感到尊敬.另一个负面影响是,如果请求未经授权,两个中间件组件都会对其提出质疑.Cookie中间件会将401响应更改为302以重定向到登录页面.这也不是你想要的Web API请求."

    因此,现在config.SuppressDefaultHostAuthentication()调用需要授权的Web API调用将忽略与请求一起自动发送的cookie,并查找以"Bearer"开头的Authorization标头.MVC控制器将继续使用cookie身份验证,并且不知道令牌身份验证机制,因为它不适合开始的网页身份验证.

    2023-02-06 15:31 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有