Asp.net web api 如何验证和更改JWT Alg
我正在使用ASP.NETOpenIDConnect服务器项目(ASOS)为我的WebAPI创建和使用JWT 我现在正在尝试对令牌执行各种验证 我想知道如何检查“alg”类型。 我注意到一个问题,即“none”可以传入,这意味着有人可以伪造令牌(我不确定是否只是特定的库有此问题,或者检查是否只是一般的好做法,但如果我执行此检查,我会感到更安全) 另外,如何验证JWT的完整性 目前我的令牌颁发者和WebAPI在同一个项目中,所以我猜它是自动为我检查的?还是根本不检查 我的理解是,如果您没有指定任何凭据(不确定我在哪里读到),则会在磁盘上为您添加某种签名凭据 提供某种签名凭证会自动更新“alg”属性吗 如果我的令牌颁发者位于1台服务器上,而我的WebAPI位于完全不同的位置,该怎么办。我将如何验证令牌是否来自我的令牌颁发者并且没有受到干扰 大概我必须手动添加证书,然后以某种方式共享公钥? 如果是这样,有人能告诉我应该在哪里添加公钥来检查JWT的完整性吗? 这一部分大概是关于asp.net核心而不是OpenIDConnect服务器(ASOS)的 谢谢 我想知道如何检查“alg”类型 您可以使用类似于读取JWT头的工具,该头包含您要查找的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在同一个项目中,所以我猜它是自动为我检查的?还是根本不检查 我的理解是,如果您没有指定任何凭
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
)
下面是一个例子:
我的理解是,如果您没有指定任何凭据(不确定我在哪里读到),则会在磁盘上为您添加某种签名凭据
这是最新的情况