You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure AD认证能否在请求头/体传递ClientId与Authority及如何读取认证配置

问题解答

关于ClientId、TenantId是否可以放在请求体/请求头中传递

  • 你当前使用的code id_token响应类型属于OIDC标准授权码流,按照OIDC核心规范要求,授权请求默认必须通过GET重定向方式发起,相关参数(包括client_id、tenant_id)默认会放在URL Query中传递,Azure AD的授权端点原生不支持通过POST请求体接收授权请求参数。
  • 补充说明:ClientId、TenantId本身不属于敏感信息,设计上就是允许公开出现在跳转URL、前端代码中的,真正需要保密的是ClientSecret,只要不把ClientSecret泄露到前端即可。
  • 如果确实需要避免参数明文出现在URL中,可以使用OIDC的request参数方案:将所有授权请求参数打包加密为一个JWT字符串,仅传递这一个参数到Azure AD,Azure AD支持该特性,你可以通过自定义OpenIdConnect中间件的RedirectToIdentityProvider事件实现:
RedirectToIdentityProvider = context =>
{
    // 构造包含所有参数的JWT作为request参数,替换原有明文参数
    return Task.CompletedTask;
}

如何获取已存储的AuthenticationProperties并检索指定属性

分两种场景实现:

  1. 认证流程中(如OIDC事件回调内):可以直接从事件上下文的AuthenticationTicket中读取,示例如下:
SecurityTokenValidated = context =>
{
    var properties = context.AuthenticationTicket.Properties;
    // 检索指定属性
    var targetValue = properties.Dictionary["自定义属性名"];
    return Task.CompletedTask;
}
  1. 认证完成后(业务代码中):通过OWIN上下文的认证管理器读取:
var owinContext = HttpContext.GetOwinContext();
var authResult = await owinContext.Authentication.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationType);
if (authResult != null)
{
    var properties = authResult.Properties;
    var targetValue = properties.Dictionary["自定义属性名"];
}

如何读取已注册的OpenIdConnectAuthenticationOptions配置做校验

推荐的实现方式是在注册中间件时就将配置实例存储起来,方便后续读取校验,示例如下:

// 先实例化配置对象
var oidcOptions = new OpenIdConnectAuthenticationOptions("MyDomain")
{
    ClientId = clientId,
    Authority = authority,
    // 其余配置项
};
// 注册中间件
app.UseOpenIdConnectAuthentication(oidcOptions);
// 将配置实例存入静态变量或你的依赖注入容器
// 例如存入全局静态类
AppGlobalConfig.OidcAuthenticationOptions = oidcOptions;

后续需要校验时,直接读取存储的OidcAuthenticationOptions实例的所有属性即可,无需额外从OWIN管道中反向查找。


内容的提问来源于stack exchange,提问作者Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:54:03