使用 .NET 7 时,下面的代码在不记名令牌验证期间运行良好。不幸的是,当我的 Web API 应用程序升级到版本 8 时,此代码无法正常运行并生成此错误消息:
Bearer error="invalid_token",error_description="The signature is invalid"
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
options.IncludeErrorDetails = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidIssuer = $"https://sts.windows.net/{configuration["AD:TenantId"]}/",
ValidateIssuer = true,
ValidAudience = "00000003-0000-0000-c000-000000000000",
ValidateAudience = true,
SignatureValidator = delegate (string token, TokenValidationParameters parameters) { return new JwtSecurityToken(token); },
ValidateIssuerSigningKey = true,
RequireSignedTokens = false,
ClockSkew = TimeSpan.Zero
};
}, options => configuration.Bind("AD", options));
然后由reactjs应用程序生成并发送令牌。这既不能在本地运行,也不能发布到 Azure 应用服务。
您需要将
ValidAudience
设置为 API 的客户端 ID 或应用程序 ID URI。
您设置的ID就是Graph API的ID。
Graph 使用不同的签名机制,因此您将无法验证它。
您的 API 永远不应该接受用于其他 API(例如 Graph API)的令牌。 您还需要更新前端以获取具有应用程序中定义的范围的正确令牌。