ASP.NET Core MVC集成Entra与DocuSign多认证技术问询
疑问1:Entra 是否不使用 Cookie 认证?我们是否不应修改这一点?
Entra ID(Azure AD)在 ASP.NET Core MVC 中默认依赖 Cookie 认证来持久化用户身份。MVC 是服务器端渲染架构,需要通过 Cookie 维持用户会话:当用户完成 Entra ID 的 OAuth2 授权码流认证后,ASP.NET Core 会将加密后的用户身份信息存储在 Cookie 中,后续请求通过读取该 Cookie 识别已认证用户。
你不需要刻意修改这个默认行为,强行禁用 Cookie 会导致 MVC 无法维持会话,用户每次请求都需重新走 Entra ID 认证流程,不符合内部系统的使用逻辑。之前遇到的“需启用默认认证方案的 Cookie”异常,本质是 Entra ID 认证中间件依赖 Cookie 作为默认的身份持久化方案,并非要求额外配置无关的 Cookie 认证。
疑问2:是否可在 Program.cs 中通过 AddAuthentication() 实现上述多认证场景?EnableTokenAcquisitionToCallDownstreamApi() 的作用是什么?
关于多认证场景的实现
完全可以在 Program.cs 中通过 AddAuthentication() 配置多认证方案:
- 将 Entra ID 认证设为默认方案,确保所有用户请求先经过 Entra ID 校验;
- 单独为 DocuSign 配置 OAuth2 认证方案,用于处理 DocuSign API 的授权码流。
示例配置片段如下:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd")) // Entra ID 认证配置 .AddOAuth("DocuSign", options => // DocuSign 专属 OAuth 方案 { options.ClientId = builder.Configuration["DocuSign:ClientId"]; options.ClientSecret = builder.Configuration["DocuSign:ClientSecret"]; options.CallbackPath = "/signin-docusign"; options.AuthorizationEndpoint = "https://account-d.docusign.com/oauth/auth"; options.TokenEndpoint = "https://account-d.docusign.com/oauth/token"; options.UserInformationEndpoint = "https://account-d.docusign.com/oauth/userinfo"; // 按需配置 DocuSign 所需的 Scope options.Scope.Add("signature"); });
后续在需要调用 DocuSign API 的控制器/操作上,可通过 [Authorize(AuthenticationSchemes = "DocuSign")] 触发 DocuSign 的授权流程(前提是用户已通过 Entra ID 认证)。
关于 EnableTokenAcquisitionToCallDownstreamApi() 的作用
这个方法是 Microsoft.Identity.Web 库提供的,核心作用是:让已通过 Entra ID 认证的用户,以自身身份获取访问Entra ID 保护的下游 API的令牌,同时自动处理令牌的缓存、刷新逻辑。它仅针对 Entra 生态内的 API 调用,不适用于 DocuSign 这类第三方 OAuth 服务——你需要为 DocuSign 单独配置 OAuth 方案,或者像之前那样手动调用 DocuSign SDK 的方法处理授权流程。
内容的提问来源于stack exchange,提问作者B Reed

