0

我正在使用 ASP.Net OpenID Connect Server 项目 (ASOS) 为我的 WebAPI 创建和使用 JWT。

我现在正在尝试对令牌执行各种验证。

我想知道如何检查“alg”类型。我知道可以传入“none”的问题,这意味着有人可以伪造令牌(我不确定是否只是特定的库有问题,或者它是否只是检查的一般好习惯,但如果我执行该检查,我会感觉更安全)。

另外,如何验证 JWT 的完整性?

目前我的令牌发行者和 WebAPI 在同一个项目中,所以我猜它会自动为我检查?还是根本没有检查?

我的理解是,如果您未指定任何签名凭据,则会在磁盘上为您添加某种签名凭据(不确定我在哪里读到的)。

提供某种签名证书会自动更新“alg”属性吗?

如果我的令牌发行者在 1 台服务器上,而我的 WebAPI 在某个完全不同的地方怎么办。我将如何验证令牌来自我的令牌发行者并且没有受到干扰。

大概我必须手动添加证书,然后以某种方式共享公钥?如果是这样的话,有人能指出我应该在哪里添加公钥来检查 JWT 完整性吗?大概这部分是关于 asp.net Core 而不是 OpenIDConnect Server (ASOS)?

谢谢。

4

1 回答 1

2

我想知道如何检查“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:

JWK Set

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.

于 2016-08-09T22:51:49.373 回答