如何在ASP.NET Core 2.0的OpenIdConnectMiddleware中设置Auth0受众参数?
解决ASP.NET Core 2.0中OpenIdConnectMiddleware添加Auth0 Audience参数的问题
嘿,这个场景我太熟悉了!ASP.NET Core 2.0的OpenIdConnectOptions确实没有直接提供Audience的配置项,但我们可以通过拦截授权请求的方式手动注入这个参数,具体步骤如下:
核心思路
利用OpenIdConnectEvents中的OnRedirectToIdentityProvider事件——这个事件会在应用重定向到Auth0的/authorize端点之前触发,我们可以在这里给授权请求添加额外的audience参数。
具体代码实现
在你的Startup.cs的ConfigureServices方法中,配置OpenIdConnect认证时添加这个事件处理:
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.OpenIdConnect; // ... services.AddAuthentication(options => { options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddCookie() .AddOpenIdConnect(options => { // 基础Auth0配置 options.Authority = "https://your-auth0-domain.auth0.com/"; options.ClientId = "your-auth0-client-id"; options.ClientSecret = "your-auth0-client-secret"; options.ResponseType = "code"; // 使用授权码模式 // 清理默认Scope,添加你需要的权限 options.Scope.Clear(); options.Scope.Add("openid"); options.Scope.Add("profile"); options.Scope.Add("read:your-api-data"); // 替换成你的API所需的具体权限 // 关键操作:添加Audience参数 options.Events = new OpenIdConnectEvents { OnRedirectToIdentityProvider = context => { // 填入你在Auth0中创建的API的Identifier(即目标Audience) context.ProtocolMessage.SetParameter("audience", "https://your-api-identifier/"); return Task.CompletedTask; } }; });
额外注意事项
- 确保你在Auth0的应用设置里,已经将目标API授权给当前客户端(在Auth0控制台的应用页面,找到"APIs"标签,添加对应的API权限)。
- 拿到访问令牌后,你可以通过
context.HttpContext.GetTokenAsync("access_token")获取它,调用API时将其放在Authorization头中(格式:Bearer {access_token})。
内容的提问来源于stack exchange,提问作者Geir Sagberg
相关产品推荐
相关产品推荐

