应使用Microsoft.AspNetCore.Authentication.OpenIdConnect或IdentityModel等成熟封装,避免手写OAuth2.0流程;第三方回调地址须与注册完全一致;access_token不可直接用作身份凭证,需通过userinfo端点获取用户标识并创建本地会话;PKCE为现代OAuth2.0强制要求,.NET 6+默认启用但需确认配置。OAuth2.0在C#里不是靠自己手写协议流程你不需要手动拼authorization头、解析code、再post换access_token------.net生态早有成熟封装,硬撸只会掉进重定向丢失、pkce漏配、token刷新失败这些坑。关键判断:用Microsoft.AspNetCore.Authentication.OpenIdConnect(Web应用)或IdentityModel(后台服务/桌面端)就够了,别碰HttpClient裸调。ASP.NET Core MVC/Razor Pages:走AddOpenIdConnect + SignInAsync,它自动处理授权码流转、state校验、cookie签发.NET 6+ Minimal API 或 WinForms/WPF:用IdentityModel.OidcClient,它封装了PKCE、token存储、刷新逻辑千万别用WebClient或原始HttpClient去GET授权URL再手动解析回调参数------state防CSRF、code_verifier校验、重定向URI匹配全得自己兜底,99%的人第一次就漏掉code_challenge_method=S256第三方登录回调地址必须和注册时完全一致哪怕多一个/、少一个https、端口没写对,授权服务器直接拒绝返回code,浏览器卡在白页,控制台连错误都看不到。常见错误现象:invalid_redirect_uri、redirect_uri_mismatch、或者根本没跳转回你的站点,停留在第三方登录页不动。检查第三方平台(微信/支付宝/GitHub)后台填的Authorized redirect URIs,必须和你代码里CallbackPath拼出来的完整URL一模一样本地开发时,https://localhost:5001/signin-oidc和https://localhost:5001/signin-oidc/是两个不同URIDocker或反向代理后,如果用了Nginx/Apache,确保X-Forwarded-Proto和X-Forwarded-Host头被正确传递,否则HttpContext.Request.Scheme读出来还是http,生成的回调地址就错access_token拿回来之后不能直接当用户身份用access_token是给调第三方API用的,不是你系统里的登录凭证。把它存进Session或JWT里发给前端,等于把第三方的钥匙交出去,一旦泄露或过期,用户就登不进你的系统。正确做法:拿到access_token后,立刻用它请求第三方的userinfo端点(比如https://api.weixin.qq.com/sns/userinfo),提取openid或sub作为唯一标识,在你自己的数据库建用户记录,再发你自己的session cookie或JWT。 Mokker AI AI产品图添加背景
相关推荐
ClickHouseDB5 小时前
ClickHouse Cloud 与 Snowflake 实时性价比对比:CostBench 测试中的 412 倍差距来第九序言T5 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完m0_639906945 小时前
Redis入门|五种数据结构、使用场景、持久化RDB&AOFJava后端的Ai之路5 小时前
CAS并发控制-从CPU指令到企业级乐观锁qq_426003965 小时前
UI自动化高频次登录login限流解决方案Sakura_j_h_6 小时前
EasyEDA PCB 快速设计Skills时间售卖铺6 小时前
触发器与函数实战:MySQL高效编程秘诀qetfw6 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证quantdash_cc7 小时前
如何验证历史行情的交易日期是否完整覆盖研究区间?I Am a robert girl7 小时前
当智能体学会“串通”:从长程交互中读懂涌现式合谋