请注意:此问题与此问题不同,因此请不要将此问题标记为重复。
我搭建了一个web api代码,它使用Azure Active Directory通过Visual Studio 2019进行身份验证,并遵循此文档,通过使用我的Azure AD B2C租户的配置条目来配置基本的搭建应用程序。
服务配置方法类似于以下代码片段:
public void ConfigureServices(IServiceCollection services)
{
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
services
.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
配置文件包含以下AzureAd配置项,其中我屏蔽了实际ID:
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "testdirectoryv44.onmicrosoft.com",
"TenantId": "1234abcdef......,
"ClientId": "abcdef567....."
}
通过在Azure门户上运行userflow,我获得了一个令牌,并能够通过https://jwt.ms这很好。但是,调用此GET请求时,我收到以下错误消息:<code>https://localhost:44362/api/values由邮递员在发送请求时将承载令牌包含在标题中:(错误消息显示在VS 2019的输出窗格中)
微软。AspNetCore . authentic ation . jwtbearer . jwtbearerhandler:信息:无法验证令牌。
Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotundException: IDX10501: 签名验证失败.无法匹配键: 孩子: “ABCDEF...”, 标记: “{”typ“:”JWT“,”alg“:”RS256“,”kid“:”ABCDEF...“}。{“exp”:1572358190,“nbf”:1572354590,“ver”:“1.0”,“iss”:“https://testdirectoryv44.b2clogin.com/abcdef1234556/v2.0/”,“sub”:“8799abcdef0000”,“aud”:“89000abcdecf999,”nonce“:”默认农牌“,”iat“:1572354590”,“auth_time”:1572354590,“idp_access_token”:“大面具”,idp“:”https://sts.windows.net/abcdef11234.../“,”名称“:”MyName“,”extension_InternalKey“:”KEY400“,”given_name“:”MyName“,”family_name“:”MyFamily“,”extension_InternalUserId“:”客人 tfp“:”B2C_1_testdirectoryv44“}'.at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(字符串令牌, TokenValidationParameters 验证参数) at System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(字符串令牌, TokenValidationParameters 验证参数验证参数, SecurityToken
Web api 的代码与以下代码片段一样简单,该代码片段由 Visual Studio 2019 搭建:
[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public ActionResult<string> Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody] string value)
{
// For more information on protecting this API from Cross Site Request Forgery (CSRF) attacks, see https://go.microsoft.com/fwlink/?LinkID=717803
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
// For more information on protecting this API from Cross Site Request Forgery (CSRF) attacks, see https://go.microsoft.com/fwlink/?LinkID=717803
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id)
{
// For more information on protecting this API from Cross Site Request Forgery (CSRF) attacks, see https://go.microsoft.com/fwlink/?LinkID=717803
}
}
几天来,我一直在花时间找出这次失败的根本原因,但到目前为止还没有成功。我在导致此问题的代码或 Azure AD 配置中缺少什么点,以及为什么 https://jwt.ms 能够成功解码令牌?
请注意,Azure广告与Azure广告B2C不同。
服务配置方法
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(AzureADB2CDefaults.BearerAuthenticationScheme)
.AddAzureADB2CBearer(options => Configuration.Bind("AzureAdB2C", options));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
appsettings.json
{
"AzureAdB2C": {
"Instance": "https://tony**test.b2clogin.com/tfp/",
"ClientId": "5eaf724c-a61e-***-a217-44ffd45f9dfe",
"Domain": "tony**test.onmicrosoft.com",
"SignUpSignInPolicyId": "B2C_1_testsignupin"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
可以按照这个详细教程来。
当我重新启动identityserver4客户端应用程序第一次获得异常时,我使用identityserver4处理SSO问题 因此,我将更改为但在重新启动identityserver时仍然会出现错误
这是ASP操作之一: 传递令牌并触发验证。验证在Validate方法中: 如你所见,我们尝试了不同的方法。我们在行中出现了以下错误 提前致谢
请帮忙。我有一个 SP,以及一个用于远程 IDP 的公钥。我上传了 spring sam 的示例,并对其进行了更改,公钥被添加到带有别名的 jks 文件中(使用键工具,命令列表显示 cer 已导入),并且它指向带有签名键的 idp 扩展元数据。但最终验证失败了。 org.opensaml.ws.security.安全策略异常:协议消息签名验证失败
我试图使用javascript创建ECDSA算法的密钥对,签名消息,然后在服务器端验证它(使用Java)。 示例javascript代码: 例如: 我做错了什么?
问题内容: 大家好 这是我的要求信息: 我尝试验证与body标签相关的。有像和这样的标签,这对我来说真的很混乱。我的问题是如何验证身体部位?首先,我应该获得什么标签来开始验证 要不就 ??? 我必须执行哪些操作(规范化/转换/加密)??? 任何帮助表示赞赏。提前致谢。 问题答案: 解决方案是: 哪里 并向X509KeySelector提供验证签名所需的公钥。
我有一个简单的登录模型类,几乎没有数据注释验证 View是一个部分View,如下所示: 我相信我已经做了验证消息显示所需的所有事情,但它没有,客户端验证也没有。在母版页的头部区域,我还包括了以下脚本 是什么导致了这个问题?解决办法是什么?