Asp.net web api 如何验证和更改JWT Alg

Asp.net web api 如何验证和更改JWT Alg,asp.net-web-api,oauth,oauth-2.0,asp.net-core,aspnet-contrib,Asp.net Web Api,Oauth,Oauth 2.0,Asp.net Core,Aspnet Contrib,我正在使用ASP.NETOpenIDConnect服务器项目(ASOS)为我的WebAPI创建和使用JWT 我现在正在尝试对令牌执行各种验证 我想知道如何检查“alg”类型。 我注意到一个问题,即“none”可以传入,这意味着有人可以伪造令牌(我不确定是否只是特定的库有此问题,或者检查是否只是一般的好做法,但如果我执行此检查,我会感到更安全) 另外,如何验证JWT的完整性 目前我的令牌颁发者和WebAPI在同一个项目中,所以我猜它是自动为我检查的?还是根本不检查 我的理解是,如果您没有指定任何凭

我正在使用ASP.NETOpenIDConnect服务器项目(ASOS)为我的WebAPI创建和使用JWT

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

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

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

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

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

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

如果我的令牌颁发者位于1台服务器上,而我的WebAPI位于完全不同的位置,该怎么办。我将如何验证令牌是否来自我的令牌颁发者并且没有受到干扰

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

谢谢

我想知道如何检查“alg”类型

您可以使用类似于读取JWT头的工具,该头包含您要查找的
alg

我注意到一个问题,即“none”可以传入,这意味着有人可以伪造令牌(我不确定是否只是特定的库有此问题,或者检查是否只是一般的好做法,但如果我执行此检查,我会感到更安全)

ASOS依赖于IdentityModel(微软开发的框架)来生成JWT令牌(您可以查看)。好了,它没有受到你提到的安全漏洞的影响

要亲自尝试,可以使用jwt.io更改
alg
头值,并将结果编码的jwt发送到API

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

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

如果我的令牌颁发者位于1台服务器上,而我的WebAPI位于完全不同的位置,该怎么办。我将如何验证令牌是否来自我的令牌颁发者并且没有受到干扰

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

如果您使用JWT承载中间件,那么它会自动为您完成。为此,它直接下载公开的公共签名密钥(默认情况下,位于
/.well-known/jwks

下面是一个例子:

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

最新官方版本(beta6)也是如此,但该功能将在下一版本中删除。我们鼓励您注册X.509证书或使用临时签名密钥(在开发过程中)。如果不这样做,将引发异常

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

对。ASOS本机支持对称密钥和RSA密钥。例如,如果在调用
选项时使用
SymmetricSecurityKey
。SigningCredentials.AddKey(…)
,则将返回
HS256
(HMAC-SHA256),而不是
RS256
(RSA-SHA256)。您可以使用
Add
重载接受
签名凭证
实例来提供其他算法

我想知道如何检查“alg”类型

您可以使用类似于读取JWT头的工具,该头包含您要查找的
alg

我注意到一个问题,即“none”可以传入,这意味着有人可以伪造令牌(我不确定是否只是特定的库有此问题,或者检查是否只是一般的好做法,但如果我执行此检查,我会感到更安全)

ASOS依赖于IdentityModel(微软开发的框架)来生成JWT令牌(您可以查看)。好了,它没有受到你提到的安全漏洞的影响

要亲自尝试,可以使用jwt.io更改
alg
头值,并将结果编码的jwt发送到API

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

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

如果我的令牌颁发者位于1台服务器上,而我的WebAPI位于完全不同的位置,该怎么办。我将如何验证令牌是否来自我的令牌颁发者并且没有受到干扰

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

如果您使用JWT承载中间件,那么它会自动为您完成。为此,它直接下载公开的公共签名密钥(默认情况下,位于
/.well-known/jwks

下面是一个例子:

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

这是最新的情况