使用oauth2.0自动获取用户信息

本文介绍了OAuth 2.0在微信开发中的具体应用流程,包括用户授权获取code、通过code换取access_token、刷新access_token及拉取用户信息等步骤,并探讨了不同scope的应用场景。
开发过程中,在未使用oauth2.0之前,通常确定用户信息是使用推送消息并带有用户 openid 来实现的,但带来的问题也很明显,如果是用户主动分享出去由其他用户点击进入的则无法正常获取其基本信息,如 openid、账号、昵称等,因此,使用oauth2.0是现阶段各开发者必经的一个过程 在官方文档中,关于其使用介绍的已经很清楚了,这里做一下简单引用
1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要) 4 第四步:拉取用户信息(需scope为 snsapi_userinfo) 5 附:检验授权凭证(access_token)是否有效
官方文档在这里, 传送门 值得注意的是 scope 的应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息),因此,我们可以做的一些应用场景:邀请朋友进行支持,分享获得机会等。
### 在 ASP.NET 中通过 OAuth 2.0 获取用户信息 为了在 ASP.NET 应用程序中利用 OAuth 2.0 协议获取用户信息,通常涉及以下几个方面的工作: #### 配置 OAuth 客户端应用 首先,在目标社交平台(如 GitHub、Google 或者微信)注册开发者账户,并创建一个新的客户端应用程序。这一步骤会提供给开发人员一组凭证,包括 `client_id` 和 `client_secret`,这些将在后续配置过程中被使用。 #### 设置重定向 URI 确保设置了一个合法的重定向 URI,该地址是在完成授权流程之后用来接收来自提供商服务器响应的地方。此 URL 必须与你在第三方服务提供商处登记的一致[^1]。 #### 添加必要的 NuGet 包 对于 .NET Core 或更新版本的应用项目而言,可以通过安装 Microsoft.AspNetCore.Authentication.OAuth 或其他特定于某服务商的包来简化集成工作。例如,针对 Facebook 登录支持,则需引入 `Microsoft.AspNetCore.Authentication.Facebook` 类库;而对于通用场景下的自定义 OAuth 提供商连接需求来说,直接依赖基础组件即可满足要求。 ```bash dotnet add package Microsoft.AspNetCore.Authentication.OAuth ``` #### 编写中间件代码片段 下面给出了一段 C# 代码作为示例,展示了怎样向 Startup.cs 文件内的 Configure 方法注入 OAuth 认证机制以及处理回调请求的部分逻辑: ```csharp public void ConfigureServices(IServiceCollection services) { // ... other service configurations ... services.AddAuthentication(options => { options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = "OAuth"; }) .AddCookie() .AddOAuth("OAuth", options => { options.ClientId = Configuration["OAuth:ClientId"]; options.ClientSecret = Configuration["OAuth:ClientSecret"]; options.CallbackPath = new PathString("/signin-oauth"); options.AuthorizationEndpoint = "{provider_authorization_endpoint}"; options.TokenEndpoint = "{provider_token_endpoint}"; options.SaveTokens = true; options.Events = new OAuthEvents { OnCreatingTicket = async context => { var request = new HttpRequestMessage(HttpMethod.Get, $"{context.Options.UserInformationEndpoint}?access_token={Uri.EscapeDataString(context.AccessToken)}"); var response = await context.Backchannel.SendAsync(request); response.EnsureSuccessStatusCode(); var user = JObject.Parse(await response.Content.ReadAsStringAsync()); context.RunClaimActions(user); // 自动映射 claims // 手动添加更多 claim context.Identity?.AddClaim(new Claim(ClaimTypes.NameIdentifier, (string)user["id"])); } }; }); } ``` 这段代码实现了基本的身份验证功能,其中包含了如何解析从外部 API 返回的数据并将其转换成 Claims 对象的过程[^2]。 #### 处理用户数据 一旦获得了用户的同意并通过了身份验证阶段,就可以依据接收到的 access token 向对应的 OpenID Connect / UserInfo Endpoint 发起 HTTP 请求以取得更详细的资料记录。上述例子中的 `OnCreatingTicket` 回调函数正是负责这项工作的核心部分之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值