乌市泽哥 发表于 2025-11-4 22:25:40

学习ASP.NET Core的身份认证(基于JwtBearer的身份认证10)

  基于Cookie通报token的紧张思绪是通过用户身份验证后,将天生的token生存到Response.Cookies返回客户端,后续客户端访问服务接口时会主动携带Cookie到服务端以便验证身份。之前不绝搞不清晰的是服务端步调怎样从Cookie读取token举行认证(一样平常都是将token放到header中以特定键值对情势主动验证身份),不外参考文献2中给出示例,紧张是处置惩罚JwtBearerEvents.OnMessageReceived变乱,该变乱是吸取到 protocol message时触发,此时可以从Cookie中取出token并将其赋予MessageReceivedContext.Token属性,以便支持身份验证。紧张代码如下所示:

public async Task<ApiResult> LoginPlus( UserInfo info)
{
    try
    {
      if (_dbClient.Queryable<AppUser>().Any(r => (r.Account == info.Name) && (r.Password == info.Password)))
      {
            AppUser curUser = _dbClient.Queryable<AppUser>().First(r => (r.Account == info.Name) && (r.Password == info.Password));
         
            ApiResult result = new ApiResult();
            result.UserName = curUser.Name;

            var cookieOptions = new CookieOptions
            {
                HttpOnly = true,
                Secure = true,
                Expires = DateTime.UtcNow.AddDays(7)
            };
            Response.Cookies.Append("auth_token", GetToken(info.Name), cookieOptions);

            return result;
      }
      else
      {
            return new ApiResult("身份验证失败", 500, false);
      }
    }
    catch (Exception ex)
    {
      return new ApiResult(ex.Message, 500, false);
    }
}
builder.Services.AddAuthentication(options =>
{
    ...
}).AddJwtBearer(options =>
{
    ...

    options.Events = new JwtBearerEvents
    {
      OnMessageReceived = context =>
      {
            var accessToken = context.Request.Cookies["auth_token"];

            if (!string.IsNullOrEmpty(accessToken))
            {
                    //Bearer Token. This will give the application an opportunity to
                    //retrieve a token from an alternative location.
                context.Token = accessToken;
            }

            return Task.CompletedTask;
      }
    };
});
  先在postman中举行验证,如下面两图所示,调用LoginPlus后,会在客户端Cookie中存储值为auth_token的token数据。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNDkyNTViZGIzMjAyNGJjYjgwZTc3OTc1YTc1MDdmYTQucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvODI3ZTk2NTc0ZjA4NGQ4YWFkNjNmNTIzZGRjODRhZWMucG5n
  调用另一需授权的服务时,不须要设置header,也不须要别的操纵,postman会主动携带Cookie调用服务,也能正常调用并返回数据。如果手工删除Cookie,再调用服务时则会报401错误。
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvZWIxOGZlYjIxNTZiNDVjZjk1YjRmMTllOWUxMmQzMWYucG5n
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9kaXJlY3QvNjZkNDljMTU5M2Y3NDQwMGExNTUxMWZiMmUwMWJhNWYucG5n
参考文献:
百度AI智能问答,搜刮条件:asp.net core 通过Cookie通报token
https://www.cnblogs.com/CreateMyself/p/15755657.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 学习ASP.NET Core的身份认证(基于JwtBearer的身份认证10)