ASP.NET Core下Google OAuth两类NuGet包配置共享及共存问题咨询
关于ASP.NET Core中两套Google认证方案的问题解答
问题1:是否可以实现两套OAuth体系的配置、登录状态等数据的共享?
可以实现,分两类场景处理:
- 配置共享:两套方案的
ClientId和ClientSecret完全可以复用,你直接将两个参数存在公共变量中,分别传入两个配置方法即可,不需要在Google云控制台申请两套凭证。 - 登录状态共享:只要满足以下条件即可实现登录状态互通,用户只需要登录一次就能同时满足Identity第三方登录和Google API调用的需求:
- 统一两个第三方认证方案的
SignInScheme为同一个Cookie认证方案(默认可以用CookieAuthenticationDefaults.AuthenticationScheme或者ASP.NET Core Identity自带的Cookie方案) - 对齐两个方案的声明类型映射规则,避免同一用户的身份标识、用户信息等声明内容不一致
- 若需要共享Google返回的
access_token、refresh_token等令牌数据,可以在两个方案的OnCreatingTicket事件中统一将令牌写入用户身份声明或者持久化存储,两套体系都可以读取使用
- 统一两个第三方认证方案的
问题2:同时调用AddGoogle()和AddGoogleOpenIdConnect()两个方法是否会产生冲突?
默认配置下不会产生冲突,原因是两个方法注册的认证处理器使用不同的默认Scheme:
AddGoogle()的默认Scheme为GoogleDefaults.AuthenticationScheme(固定值为Google)AddGoogleOpenIdConnect()的默认Scheme为GoogleOpenIdConnectDefaults.AuthenticationScheme(固定值为GoogleOpenIdConnect)
两个认证处理器是完全独立的实例,不会互相覆盖,仅需要注意两个避坑点:
- 不要混淆两个方案的挑战、禁止规则,避免出现跳转错误登录授权页的问题
- 两个方案的默认回调路径不同,需要在Google云控制台的OAuth凭证配置中,将两个回调地址都加入授权重定向URI列表,避免回调时验证失败
额外最佳实践
如果没有特殊需求,完全可以只保留AddGoogle()一套配置:在Identity的Google外部登录流程中拿到access_token后,直接通过GoogleCredential.FromAccessToken(access_token)方法即可初始化Google.Apis系列的API客户端,不需要额外引入Google.Apis.Auth.AspNetCore的认证体系,减少维护成本。
内容的提问来源于stack exchange,提问作者ˈvɔlə
相关产品推荐
相关产品推荐

