Azure AD Jwt令牌验证无互联网

Azure AD Jwt令牌验证无互联网,azure,authentication,.net-core,jwt,azure-active-directory,Azure,Authentication,.net Core,Jwt,Azure Active Directory,我有一个.net核心web api,它运行在公司内部网A中的计算机上,并且没有internet访问权限。 然后我在内部网B中有一个网站,该网站在Azure AD中经过身份验证。 我想用头身份验证:JwtTokenFromAzure将请求从B发送到A 验证此令牌的最佳选项是什么?要验证id\u令牌或access\u令牌,您的应用程序应验证令牌的签名和声明。 您可以使用手动验证令牌,也可以使用代码 要手动验证令牌,应首先验证令牌的签名。Azure AD发行的令牌使用行业标准的非对称加密算法进行签名,


我有一个.net核心web api,它运行在公司内部网A中的计算机上,并且没有internet访问权限。
然后我在内部网B中有一个网站,该网站在Azure AD中经过身份验证。
我想用头
身份验证:JwtTokenFromAzure
将请求从B发送到A

验证此令牌的最佳选项是什么?

要验证id\u令牌或access\u令牌,您的应用程序应验证令牌的签名和声明。 您可以使用手动验证令牌,也可以使用代码

要手动验证令牌,应首先验证令牌的签名。Azure AD发行的令牌使用行业标准的非对称加密算法进行签名,JWT的头包含有关用于签名令牌的密钥和加密方法的信息

注意:
alg
claim表示用于对请求签名的算法 令牌,而
kid
声明表示 用于在令牌上签名。v1.0端点返回x5t和 kid声明,而v2.0端点只响应kid声明

这是一个v1令牌头示例。在这里,您可以使用
kid
值在中查找相关的公钥(
x5c

然后在jwt.io中,将x5c值粘贴到公钥框中,格式如下:

格式如下:

有关详细信息,您可以阅读

如果您想使用代码验证令牌,下面是一个示例:

公共JwtSecurityToken验证(字符串令牌) { 字符串stsDiscoveryEndpoint=”https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"; ConfigurationManager configManager=新的ConfigurationManager(stsDiscoveryEndpoint); OpenIdConnectConfiguration config=configManager.GetConfigurationAsync().Result; TokenValidationParameters validationParameters=新的TokenValidationParameters { ValidateAudience=false, validateisuer=false, IssuerSigningTokens=config.SigningTokens, ValidateLifetime=false }; JwtSecurityTokenHandler-tokendHandler=新的JwtSecurityTokenHandler(); SecurityToken jwt; var result=tokendHandler.ValidateToken(令牌、validationParameters、out jwt); 将jwt作为JwtSecurityToken返回;
}要验证id\u令牌或访问令牌,您的应用程序应验证令牌的签名和声明。 您可以使用手动验证令牌,也可以使用代码

要手动验证令牌,应首先验证令牌的签名。Azure AD发行的令牌使用行业标准的非对称加密算法进行签名,JWT的头包含有关用于签名令牌的密钥和加密方法的信息

注意:
alg
claim表示用于对请求签名的算法 令牌,而
kid
声明表示 用于在令牌上签名。v1.0端点返回x5t和 kid声明,而v2.0端点只响应kid声明

这是一个v1令牌头示例。在这里,您可以使用
kid
值在中查找相关的公钥(
x5c

然后在jwt.io中,将x5c值粘贴到公钥框中,格式如下:

格式如下:

有关详细信息,您可以阅读

如果您想使用代码验证令牌,下面是一个示例:

公共JwtSecurityToken验证(字符串令牌) { 字符串stsDiscoveryEndpoint=”https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration"; ConfigurationManager configManager=新的ConfigurationManager(stsDiscoveryEndpoint); OpenIdConnectConfiguration config=configManager.GetConfigurationAsync().Result; TokenValidationParameters validationParameters=新的TokenValidationParameters { ValidateAudience=false, validateisuer=false, IssuerSigningTokens=config.SigningTokens, ValidateLifetime=false }; JwtSecurityTokenHandler-tokendHandler=新的JwtSecurityTokenHandler(); SecurityToken jwt; var result=tokendHandler.ValidateToken(令牌、validationParameters、out jwt); 将jwt作为JwtSecurityToken返回;
}如果有人遇到此问题,如果您的令牌在标头中包含nouse字段,则无法验证令牌的签名。MS希望您通过调用graph API来验证它。如果令牌有效,则调用将成功。否则它将失败。请参阅:如果有人遇到此问题,如果您的令牌在头中包含nouse字段,则无法验证令牌的签名。MS希望您通过调用graph API来验证它。如果令牌有效,则调用将成功。否则它将失败。见: