可以通过在添加OpenID Connect身份验证时,显式地将audience
参数设置为期望的客户端标识符来解决此问题。这样,ASP.NET Core身份验证将确保检查id令牌中的aud
声明与预期的值相匹配。
以下是一个示例:
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect(options =>
{
options.Authority = "https://localhost:5001";
options.ClientId = "YourClientId";
options.ClientSecret = "YourClientSecret";
options.ResponseType = "code";
options.Scope.Add("openid");
options.Scope.Add("profile");
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Events = new OpenIdConnectEvents
{
OnTokenValidated = context =>
{
var expectedAudience = "YourExpectedAudience";
var tokenAudience = context.SecurityToken.Audiences.FirstOrDefault();
if (!string.Equals(tokenAudience, expectedAudience, StringComparison.OrdinalIgnoreCase))
{
context.Fail("Invalid audience.");
}
return Task.CompletedTask;
}
};
});
此示例中,我们通过在OpenID Connect选项中设置Events
属性来执行自定义逻辑。在这种情况下,我们检查id令牌中的aud
声明是否等于期望的值。如果不是,则调用context.Fail()
方法以指示验证失败。这将阻止用户进行身份验证,并在授权时触发一个403响应。