微信网页授权基本步骤
一、首先在微信公众平台配置授权回调地址(“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名);
二、关于网页授权的两种scope的区别说明
1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
三、关于网页授权access_token和普通access_token的区别
1、微信网页授权是通过OAuth20机制实现的,在用户授权给公众号后,公众号可以获取到一个网页授权特有的接口调用凭证(网页授权access_token),通过网页授权access_token可以进行授权后接口调用,如获取用户基本信息;
2、其他微信接口,需要通过基础支持中的“获取access_token”接口来获取到的普通access_token调用。
四、具体而言,网页授权流程分为四步:
1、 引导用户进入授权页面同意授权,获取code
1)、 scope为snsapi_base
https://openweixinqqcom/connect/oauth2/authorizeappid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchongqqcom%2Fphp%2Findexphp%3Fd%3D%26c%3DwxAdap
ter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_bas
e&state=123#wechat_redirect
scope为snsapi_userinfo
https://openweixinqqcom/connect/oauth2/authorizeappid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnbabluewebgamecom%2Foauth_responsephp&response_type=
code&scope=snsapi_userinfo&state=STATE#wechat_redirect
code说明 : code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期 。
2、 通过code换取网页授权access_token
首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。
请求方法
获取code后,请求以下链接获取access_token: https://apiweixinqqcom/sns/oauth2/access_tokenappid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
3、 刷新access_token(如果需要)
由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。
请求方法
获取第二步的refresh_token后,请求以下链接获取access_token:
https://apiweixinqqcom/sns/oauth2/refresh_tokenappid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
4、 拉取用户信息(需scope为 snsapi_userinfo)
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
请求方法
http:GET(请使用https协议) https://apiweixinqqcom/sns/userinfoaccess_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
OpenID Connect简称为OIDC,已成为Internet上单点登录和身份管理的通用标准。 它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。
OAuth2实际上只做了授权,而OpenID Connect在授权的基础上又加上了认证。
OIDC的优点是:简单的基于JSON的身份令牌(JWT),并且完全兼容OAuth2协议。
今天我们将会介绍一下OIDC的具体原理。
OpenID Connect发布于2014年,是建立在OAuth 20协议之上的简单身份层,它允许客户端基于授权服务器或身份提供商(IdP)进行的身份验证来验证最终用户的身份,并获得用户的相关信息。
OpenID Connect提供了RESTful HTTP API,并使用Json作为数据的传递格式。
之前我们讲到了基于XML格式的SAML协议,而OpenID Connect因为其更加简洁的数据交换格式,被越来越多的应用使用,已经成为事实上的标准。
我们看一下OpenID connect的基本流程:
ID Token就像是一个用户的身份证,它是以JWT格式存在的,并且由OP进行签名,保证它的安全性。
获取ID Token的方式就是向OP发送认证请求。
因为ID Token是以JWT格式存在的,JWT可以分为三个部分,分别是Header,Payload和Signature。
这里我们主要关注一下Payload的json内容:
上面的是ID Token的标准Claims。
现在我们知道了ID Token是什么,那么在OpenID Connect的RP客户端如何请求一个ID Token呢?
虽然OpenID Connect并未指定应如何实际验证用户身份,这取决于提供者来决定。但是我们通常由Web浏览器来执行认证步骤。
浏览器将用户重定向到认证服务器的认证窗口,用户输入用户名和密码之后,通过OAuth 20协议请求ID token。
使用OAuth 20来获取ID Token有3种方式:
Authorization Code流程的步骤如下:
客户端准备身份认证请求,请求里包含所需要的参数
客户端发送请求到授权服务器
授权服务器对最红用户进行身份认证
授权服务得最终用户的统一/授权
授权服务器把最终用户发送回客户端,同时带着授权码
客户端使用授权码向Token端点请求一个响应
客户端接收到响应,响应的Body里面包含在和ID Token和Access Token
客户端验证ID Token,并获得用户的一些身份信息
上图就是一个隐式授权的例子,和Authorization Code模式不同的是,认证服务器返回的是一个access token片段,只有这个片段,我们是无法得到access token的。
这里我们需要额外请求一次client resource服务器,服务器将会返回一个script脚本,通过这个脚本,我们对access token片段进行解析,得到最终的access token。
混合模式比较少用到,它是前面两种模式的混合,它允许从前端和后端分别获取token值。
那么我们拿到请求得到的ID Token可以做什么事情呢?
服务器端不需要存储会话信息,我们只需要在服务器端对token进行验证即可。
这里我们举一个使用认证码授权获取到ID token的例子。
下面是一个重定向的例子:
在OP端,将会检测是否已经存在一个有效的用户session,否则将会弹出用户登录界面,让用户登录。
登录成功之后,client将会重定向到redirect_uri,并带上认证码:
上面返回的code只是一个中间产物,RP需要将code提交给OP换取ID token。
这次我们直接使用一个后端的POST请求:
如果成功,OP会返回一个JSON对象,带有ID token, access token 或者 refresh token:
其中ID token的格式是JWT。
我们获取到的ID token里面已经包含了一些非常有用的claims信息。
事实上ID Token还可以包含其他的user info信息:
比如name,profile,picture,email,gender,birthdate,phone_number,address等等有用的信息。
我们可以在token请求的时候添加上额外的scope:
比如上面的例子中,我们添加了额外的email信息,那么OP将会在token中加入email选项。
比如:
我们知道,服务号有获取用户基本信息的接口,通过oauth20网页授权获取的。但是认证的订阅号也有获取用户基本信息的接口了,但是与服务号不同的是,这个需要用户主动触发才可以获得,需要用户发送任意关键词或者点击菜单。
1、先获取openid,用户主动触发,获得openid
2、获取access_token
3、通过这两个获取用户基本信息,头像,昵称等
接口调用请求说明
http请求方式: GET
https://apiweixinqqcom/cgi
先在基本配置服务器地址填写下面php文件路径,其中php文件需要修改token
cheeckphp
然后去公众号回复任意关键词即可。
openid拿到了,该去拿access_token了。
也很容易。接口是:
https://apiweixinqqcom/cgi
把上面这两个参数(appid=修改,secret=修改)改成你公众号的即可,然后打开公众号基本配置,ip白名单,然后就可以正常获取access_token了。
接口调用请求说明
http请求方式: GET
https://apiweixinqqcom/cgi
把上面两个值加上去,访问这个链接即可。
转自: https://segmentfaultcom/a/1190000014963408
0条评论