我想知道如何检查“alg”类型。
您可以使用jwt.io之类的工具来读取 JWT 的标头,其中包含alg
您要查找的值。
我知道可以传入“none”的问题,这意味着有人可以伪造令牌(我不确定是否只是特定的库有问题,或者它是否只是检查的一般好习惯,但如果我执行该检查,我会感觉更安全)。
ASOS 依赖 IdentityModel(Microsoft 开发的一个框架)来生成 JWT 令牌(您可以查看这个其他答案以获取更多信息)。AFAIK,它不受您提到的安全漏洞的影响。
要自己尝试,您可以使用 jwt.io 更改alg
标头值并将生成的编码 JWT 发送到您的 API。
另外,如何验证 JWT 的完整性?
目前我的令牌发行者和 WebAPI 在同一个项目中,所以我猜它会自动为我检查?还是根本没有检查?
如果我的令牌发行者在 1 台服务器上,而我的 WebAPI 在某个完全不同的地方怎么办。我将如何验证令牌来自我的令牌发行者并且没有受到干扰。
大概我必须手动添加证书,然后以某种方式共享公钥?如果是这样的话,有人能指出我应该在哪里添加公钥来检查 JWT 完整性吗?大概这部分是关于 asp.net Core 而不是 OpenIDConnect Server (ASOS)?
If you use the JWT bearer middleware, then it's automatically done for you. For that, it directly downloads the public signing keys exposed by ASOS' JWK set endpoint (by default, at /.well-known/jwks
).
Here's an example:
My understanding is that some kind of signing credential is added for you on disk if you don't specify any (Not sure where I read that).
This is true with the latest official version (beta6) but this feature will be removed in the next version. You'll be encouraged to register a X.509 certificate or use an ephemeral signing key (during development). An exception will be thrown if you don't.
Would providing some kind of signing credential automatically update the "alg" property?
Yes. ASOS natively supports both symmetric keys and RSA keys. For instance, if you use a SymmetricSecurityKey
when calling options.SigningCredentials.AddKey(...)
, HS256
(HMAC-SHA256) will be returned instead of RS256
(RSA-SHA256). You can provide additional algorithms using the Add
overload accepting a SigningCredentials
instance.