我以某种方式解决了我的实际问题,但由于我不完全了解,我不满意。我什至没有足够的话要寻找。
我正在将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
。
所以我的问题仍然存在:该协议的名称是什么?