.NET Core 8.0 API集成SSO:是否需双应用?无客户端可行吗?
无需搭建额外登录网页,照样能实现SSO保护你的.NET Core API
你完全不用单独开发登录网页,核心逻辑是让调用API的请求带上Azure AD颁发的有效访问令牌,API通过验证令牌来实现SSO保护。结合你的场景,推荐这几种可行方案:
1. 客户端凭据流(适合后台服务调用)
如果你的API是被其他后台系统、定时任务这类非交互式服务调用,用这个流最适配:
- 在Azure AD里注册一个「服务主体」(相当于服务的身份账号),给它配置访问你API的权限;
- 调用方用服务主体的密钥或证书,向Azure AD申请访问令牌;
- 调用API时,把令牌放在请求头
Authorization: Bearer <令牌>里; - .NET Core 8里配置验证很简单,用
Microsoft.Identity.Web包,在Program.cs里加:
然后在appsettings.json里配置Azure AD的租户ID、API的客户端ID等参数即可。builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration, "AzureAd");
2. 授权码流+PKCE(适合用户用工具手动调用)
如果是用户用Postman、curl这类工具手动调用API,用这个流:
- 在Azure AD里注册一个「公共客户端应用」,开启PKCE;
- 用户通过工具触发授权流程,会自动跳转到Azure AD官方的登录页(不用你自己搭),登录后拿到授权码,再兑换成访问令牌;
- 拿到令牌后,同样通过
Authorization头携带令牌调用你的API。
3. 设备授权流(适合无浏览器的终端调用)
如果调用场景是没有浏览器的命令行终端,用这个流:
- 用户在终端里发起请求,会得到一个验证码和Azure AD的登录链接;
- 用户用手机/电脑打开链接,输入验证码并完成Azure AD的登录(同样用官方登录页);
- 终端会自动获取到访问令牌,之后就能调用API。
关键注意点
你只需要在Azure AD里注册对应的「API应用」,配置好允许访问的身份(服务主体或用户),然后在你的.NET Core API里配置身份验证中间件,验证请求中的令牌合法性即可,全程不需要自己开发登录页面。
内容的提问来源于stack exchange,提问作者GustavoKnx
相关产品推荐
相关产品推荐

