身份验证丢失-这是哪种JWT身份验证?

时间:2019-12-20 20:19:57

标签: asp.net-core jwt asp.net-core-webapi

我以某种方式解决了我的实际问题,但由于我不完全了解,我不满意。我什至没有足够的话要寻找。

我正在将Only office与身份验证令牌集成在一起。

回调(用于保存文档)是一个HTTP-POST,主体中带有一些JSON负载:

{  
    "key": "00020000010000009675",
    "status": 1,
    "users": [
      "2"
    ]
  }

一旦启用了安全性(共享机密),办公室编辑器还将发送带有 Bearer 方案(或其名称)的身份验证HTTP标头。 JWT。

解码后的JWT类似于主体中的有效载荷(POST):

{
  "payload": {
    "key": "00020000010000009675",
    "status": 1,
    "users": [
      "2"
    ]
  },
  "iat": 1576857169,
  "exp": 1576857469
  }

有关ASP.Net mvc中的大约HTTP请求的标头:

HeaderAuthorization = {Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXl...

问题:这是哪种身份验证?要搜索的名字吗?

该如何验证? JWT是一个简单的共享秘密。因此,这样检查令牌就可以了。但是,如果我的代码仅读取正文,并且中间件仅检查Token .....这将是 authentic 解决方案吗?

顺便说一句 如果我的(找到的)解决方案值得关注,请在此处提供一些详细信息:

我已经设置了安全性,但是在回拨的特殊情况下,我需要特殊对待(另一种安全性方案)。因此,我将控制器设置为:


        [Authorize(AuthenticationSchemes = "OnlyOfficeBearerToken")]
        [HttpPost]
        public async Task<ActionResult> OnlyOfficeCallbackHandler()
        {
            // Claim Payload aus dem verschlüsselten Token auslesen, wenn es geht.
            Claim payloadclaim = this.HttpContext.User.FindFirst(c => c.Type == "payload");
            string body = payloadclaim?.Value;

body包含我已验证的消息有效负载。如前所述:与实际身体相同。但是我不知道这种解决方案是否可以确保两者相同-我想是的。因此,有人可能会假装接受该声明的内容。

另一方面,我必须像启动时那样在设置中扩展该ASP.Net核心应用程序的过滤:

                var securityKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(configuration["OnlyOffice:CallBackSecret"]));
                services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer("OnlyOfficeBearerToken",
                    options =>
                    {
                        options.TokenValidationParameters = new TokenValidationParameters()
                        {
                            ValidateAudience = false,
                            ValidateActor = false,
                            ValidateIssuer = false,
                            ValidateIssuerSigningKey = true,
                            ValidateLifetime = true,
                            IssuerSigningKey =
                                securityKey //new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);,
                        };
                        options.RequireHttpsMetadata = false;
                        options.SaveToken = true;
                        // Extra-Handler:
                        //options.SecurityTokenValidators.Insert(0, new BodyChecker());
                    });

您会在字符串的两边看到字符串OnlyOfficeBearerToken

所以我的问题仍然存在:该协议的名称是什么?

0 个答案:

没有答案