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

已添加client secret的Azure AD应用注册无需密钥仍可认证是否正常?

问题解答:为什么Azure AD认证无需Client Secret仍可成功?

这是正常行为,核心原因和OpenID Connect的流程设计、你的代码配置有关,具体说明如下:

1. OpenID Connect流程的差异

你当前的配置默认触发了隐式流(Implicit Flow)(或混合流中仅请求ID Token的场景),这种流程原本是为无法安全存储Client Secret的公开客户端(比如SPA、纯前端应用)设计的。当你仅获取ID Token用于用户身份验证、不请求Access Token调用后端API时,Azure AD会通过预先在应用注册中配置的重定向URI来验证应用合法性——只有匹配注册过的URI才能接收回调,以此确保请求来自授权应用,无需额外的Client Secret验证。

2. Client Secret的核心作用场景

Client Secret并非所有认证场景都必需:

  • 它主要用于授权码流(Authorization Code Flow)中交换Access Token的环节,或是当你的应用需要调用Azure AD保护的第三方API时,用来证明应用自身的身份。
  • 单纯的用户登录(仅获取ID Token)不属于需要Client Secret验证的场景,Azure AD信任重定向URI的配置即可完成身份验证。

3. 你的代码配置分析

你提供的OpenIdConnectAuthenticationOptions未指定ResponseType,OWIN的OpenID Connect中间件默认会使用id_token作为响应类型,这直接触发了隐式流的逻辑。在这种模式下,Azure AD不会要求提供Client Secret,因此你能正常获取ID Token。

4. 如何强制要求Client Secret验证

如果需要确保认证请求必须携带Client Secret,可按以下步骤修改:

  1. 在Azure Portal的应用注册页面,进入「认证」标签,将应用标记为机密客户端(而非公共客户端)。
  2. 在代码中明确启用授权码流,并添加Client Secret配置:
    app.UseOpenIdConnectAuthentication(New OpenIdConnectAuthenticationOptions() With {
            .ClientId = clientId,
            .ClientSecret = clientSecret, ' 添加Client Secret配置
            .Authority = authority,
            .RedirectUri = redirectUri,
            .PostLogoutRedirectUri = postLogoutRedirectUri,
            .ResponseType = "code", ' 指定授权码流响应类型
            .Notifications = New OpenIdConnectAuthenticationNotifications() With {
                .AuthenticationFailed = Function(context) System.Threading.Tasks.Task.FromResult(0),
                .SecurityTokenValidated = Function(context)
                                              Return OnSecurityTokenValidated(context)
                                          End Function
            }}
        )
    
    配置完成后,只有携带正确Client Secret的请求才能完成授权码到Token的交换,否则会被Azure AD拒绝。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:53:15