应使用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产品图添加背景
相关推荐
㱘郳8 分钟前
飞机大战Pygame存档10岁的博客12 分钟前
DevEco Code 的 Plan+Build 模式:审方案再执行的技术深度解析buhuizhiyuci30 分钟前
【算法篇】位运算 —— 基础篇youtootech39 分钟前
HarmonyOS《柚兔学伴》项目实战08-关系型数据库入门——待办事项持久化微三云 - 廖会灵 (私域系统开发)1 小时前
电商系统国际化架构设计:多语言、多币种、多时区、多税制的全链路实现weixin_727535621 小时前
JVM 常见八股面试问答:深入底层原理阿童木写作1 小时前
跨马翻译:一站式图片视频智能处理,提升跨境电商工作效率Python图像识别-11 小时前
基于yolov8的钢铁缺陷检测系统-2027毕业版(UI界面+Python项目源码+模型+标注好的数据集)aqi001 小时前
15天学会AI应用开发(十五)使用LangChain封装AI执行链