千家信息网

微信公众平台开发之OAuth2.0有什么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"微信公众平台开发之OAuth2.0有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"微信公众平台开发之OAuth2.0有什么
千家信息网最后更新 2026年11月01日微信公众平台开发之OAuth2.0有什么用

这篇文章主要为大家展示了"微信公众平台开发之OAuth2.0有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"微信公众平台开发之OAuth2.0有什么用"这篇文章吧。

理解OAuth3.0

  首先我们通过一张图片来了解一下OAuth3.0的运作模式:

  从上图我们可以看到,整个过程进行了2次"握手",最终利用授权的AccessToken进行一系列的请求,相关的过程说明如下:

A:由客户端向服务器发出验证请求,请求中一般会携带这些参数

ID标识,例如appId

验证后跳转到的URL(redirectUrl)

状态参数(可选)

授权作用域scope(可选)

响应类型(可选)

B:服务器返回一个grant授权标识(微信默认情况下称之为code),类似于一个一次性的临时字符串密钥。如果在A中提供了redirectUrl,这里服务器会做一次跳转,带上grant和状态参数,访问redirectUrl。

C:客户端的redirectUrl对应页面,凭借grant再次发起请求,这次请求通常会携带一些敏感信息:

ID标识

密码

grant字符串(code)

grant类型(可选,微信中默认为code)

D:服务器验证ID标识、密码、grant都正确之后,返回AccessToken(注意,这里的AccessToken和之前通用接口、高级接口介绍的AccessToken没有关系,不能交叉使用)

E:客户端凭借AccessToken请求一系列的API,在此过程中不再会携带appId,Secret,grant等敏感的信息。

F:服务器返回请求结果。

微信的OAuth3.0使用

  了解了OAuth3.0的基本原理之后,我们来看一下OAuth3.0在微信中是如何运用的。

  假设一个场景:用户进入了一个微信公众账号,随后通过消息中的链接,在微信内嵌浏览器中打开了一个游戏网页,这个游戏需要用户登录并且记录用户的游戏得分。

  这种情况下我们有两种处理方式:

让用户在网页中进行注册、登录(并且每次打开这个网页都可能要重新进行登录,因为微信内置浏览器的cookie保存时间非常短),这个当然是个很坑爹的设计。

利用OAuth3.0。在用户进入这个页面的时候,先判断用户是否登录,如果没有,自动跳转到OAuth3.0授权页面,这个页面又自动进行了上述ABCD一系列验证,再通过EF得到用户的OpenId甚至更加详细的信息(包括头像),自动完成登录(或必要的注册)过程,随后用户以登录状态直接进入游戏。

  可以看出,使用OAuth3.0大幅度提高了用户体验,并且可以自动绑定识别用户微信OpenId。

  需要注意的是,上面提到的"OAuth3.0授权页面"还有两种形式:

当请求A中的Scope为snsapi_base时,整个授权过程自动完成,用户的客户端不会有任何中间页面显示,但是授权的结果仅能获取用户的OpenId(不管用户是否已关注,当然如果用户是关注用户,再次利用高级接口中的用户信息接口,利用OpenId获取用户资料也是可以的,只不过绕了几个弯)

当请求A中的Scope为snsapi_userinfo时,需要提供一个授权页面(类似很多网站利用微博账号、QQ号登陆的那种授权),仅当用户同意之后,立即获取到用户的详细信息,这里的用户可以是关注用户,也可以是未关注用户,返回的内容一致。

  也就是说,snsapi_base的方法可以"神不知鬼不觉"地获取用户OpenId,全自动完成登录注册过程,但是信息量有限;snsapi_userinfo需要用户在指定界面上授权之后,自动完成整个过程,这个授权有一个时间段,超过时间后需要重新询问用户。

Senparc.Weixin.MP OAuth3.0接口

  源文件文件夹:Senparc.Weixin.MP/AdvancedAPIs/OAuth

  源代码中相关方法如下:

namespace Senparc.Weixin.MP.AdvancedAPIs{    //官方文档:http://mp.weixin.qq.com/wiki/index.php?title=%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF#.E7.AC.AC.E4.B8.80.E6.AD.A5.EF.BC.9A.E7.94.A8.E6.88.B7.E5.90.8C.E6.84.8F.E6.8E.88.E6.9D.83.EF.BC.8C.E8.8E.B7.E5.8F.96code    ///     /// 应用授权作用域    ///     public enum OAuthScope    {        ///         /// 不弹出授权页面,直接跳转,只能获取用户openid        ///         snsapi_base,        ///         /// 弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息        ///         snsapi_userinfo    }    public static class OAuth    {        ///         /// 获取验证地址        ///         ///         ///         ///         ///         ///         ///         public static string GetAuthorizeUrl(string appId, string redirectUrl, string state, OAuthScope scope, string responseType = "code")        {            var url =                string.Format("https://open.weixin.qq.com/connect/oauth3/authorize?appid={0}&redirect_uri={1}&response_type={2}&scope={3}&state={4}#wechat_redirect",                                appId, redirectUrl.UrlEncode(), responseType, scope, state);            /* 这一步发送之后,客户会得到授权页面,无论同意或拒绝,都会返回redirectUrl页面。             * 如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。这里的code用于换取access_token(和通用接口的access_token不通用)             * 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数redirect_uri?state=STATE             */            return url;        }        ///         /// 获取AccessToken        ///         ///         ///         /// code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。        ///         ///         public static OAuthAccessTokenResult GetAccessToken(string appId, string secret, string code, string grantType = "authorization_code")        {            var url =                string.Format("https://api.weixin.qq.com/sns/oauth3/access_token?appid={0}&secret={1}&code={2}&grant_type={3}",                                appId, secret, code, grantType);            return CommonJsonSend.Send(null, url, null, CommonJsonSendType.GET);        }        ///         /// 刷新access_token(如果需要)        ///         ///         /// 填写通过access_token获取到的refresh_token参数        ///         ///         public static OAuthAccessTokenResult RefreshToken(string appId, string refreshToken, string grantType = "refresh_token")        {            var url =                string.Format("https://api.weixin.qq.com/sns/oauth3/refresh_token?appid={0}&grant_type={1}&refresh_token={2}",                                appId, grantType, refreshToken);            return CommonJsonSend.Send(null, url, null, CommonJsonSendType.GET);        }        public static OAuthUserInfo GetUserInfo(string accessToken,string openId)        {            var url = string.Format("https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}",accessToken,openId);            return CommonJsonSend.Send(null, url, null, CommonJsonSendType.GET);        }    }}

  具体的示例方法见Senparc.Weixin.MP.Sample/Controllers/OAuth3Controller.cs,以及对应视图的代码。

注意点

必须是通过认证的服务号才可以使用OAuth接口。

接口中用到的AccessToken和高级接口(包括通用接口)中用到的AccessToken互不相关,即使他们都是通过相同的AppId和Secret得到的。

目前官方的授权页面不是100%稳定,有时候需要多点几次才能顺利通过,如果发现此类情况,需要做一些判断反复请求,至少在表面上可以不让用户看到错误页面。

出于安全,在使用OAuth3.0之前,需要进入到微信后台的【我的服务】对回调页面的域名进行设置:

以上是"微信公众平台开发之OAuth2.0有什么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

用户 页面 接口 信息 过程 服务 登录 参数 客户 服务器 验证 公众 内容 情况 标识 平台 开发 高级 客户端 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 深圳市人人互联网科技有限公司 广东万易互联网科技有限公司惠州分公司 互联网科技会 金融科技还是互联网 互联网巨头反垄断金融科技 北京互联网科技公司 华宇互联网科技 互联网科技logo 互联网科技公司做什么 广州优美互联网科技 银川新华互联网科技职业技术培训学校图片 阿大互联网科技有限公司 崇明区互联网教育科技售后服务 搜狐科技互联网 迪庆互联网科技招生 互联网第三次科技革命特征 厦门江牛科技互联网 互联网与数字科技关系 容联科技互联网电商 互联网金融科技 互联网科技工作委员会主任 互联网科技有限公司图片 云电互联网科技 互联网巨头投资的硬核科技 宁波青枫互联网科技有限公司 南山科技园互联网公司有哪些 每天都有哪些好的互联网科技 北京品多多互联网科技有限公司 互联网科技创业计划的风险分析
0