作者:儒雅的天麟 | 来源:互联网 | 2023-05-26 19:12
用户授权产品介绍 概述所有支付宝开放平台的用户信息的读写均需要经过用户的许可才允许开发者使用,用户授权基于国际标准的OAuth2.0授权机制,基于此机制开发者可以获取支付宝用户信息
用户授权
产品介绍
客户端获取 authcode
通过调用 my.getAuthCode 这个 jsapi 获取用户授权,在 success 回调中可以获取到 authcode,js 代码如下:
my.getAuthCode({
scopes: 'auth_user', // 主动授权:auth_user,静默授权:auth_base。或者其它scope
success: (res) => {
if (res.authCode) {
// 认证成功
// 调用自己的服务端接口,让服务端进行后端的授权认证,并且利用session,需要解决跨域问题
my.request({
url: 'https://isv.com/auth', // 该url是您自己的服务地址,实现的功能是服务端拿到authcode去开放平台进行token验证
data: {
authcode: res.authCode,
},
success: () => {
// 授权成功并且服务器端登录成功
},
fail: () => {
// 根据自己的业务场景来进行错误处理
},
});
}
},
});
服务端获取 access_token
服务器端调用 alipay.system.oauth.token 接口换取授权访问令牌,开发者可通过获取到的 auth_code 换取access_token 和用户 ID。auth_code 作为换取 access_token 的票据,每次用户授权完成,回调地址中的 auth_code 将不一样,auth_cod 只能使用一次,一天未被使用自动过期。具体可参见文档alipay.system.oauth.token。 开放平台服务端SDK 的 java 调用示例如下:
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code");
request.setCode("4b203fe6c11548bcabd8da5bb087a83b");
request.setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
AlipaySystemOauthTokenResponse respOnse= alipayClient.execute(request);
if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}
调用服务端业务接口
在获取到 access_token 后,即可以继续使用该 token 调用 openapi 的授权类接口(比如 alipay.user.info.share、alipay.marketing.card.open等),请注意 token 的权限范围和时效性。
深入授权机制
用户授权auth_code
说明 auth_code 一次有效,auth_code 有效期为3分钟到24小时(开放平台规则会根据具体的业务场景动态调整auth_code 的有效期,但是不会低于3分钟,同时也不会超过24小时),超过有效期的 auth_code 即使未使用也将无法使用。 用户的每次授权动作都会生成一个新的 auth_code。
建议 基于安全考虑,开发者在获取 auth_code(用户授权码)后应尽快调用 alipay.system.oauth.token 接口换取access_token(访问令牌)。
授权scope
说明 scope 为公开的资源,其使用不需要签约,但是其包含的接口是否需要签约请看具体的功能包或者接口定义。 开发者可以在授权请求中包含一个或者多个用户授权范围,每个授权范围称为一个 scope,一个 scope 包含若干个开放平台接口,请求的多个 scope 通过英文逗号分隔。 授权的流程是通用的,在不同的业务场景需要授权的范围不同,需要根据具体产品接入文档中指定的 scope 替换本文中的scope参数。
scope 有效期: 这里的 scope 有效期和前面的 auth_code 有效期是两个概念。 scope的有效期会影响开发者最终获取到的access_token和refresh_token的有效期,不同scope的有效期请参考具体的产品文档。
建议: 为了产品体验考虑请按需请求需要的 scope,过多的授权范围容易导致用户放弃授权。建议在做产品的登录场景中使用 auth_base 或者 auth_user 做用户引流,后续根据需要具体业务需要引导用户请求特定scope的用户授权。
access_token
注意:用户可以取消授权,取消后 access_token 即使在有效期也无法使用。
refresh_token
注意:用户可以取消授权,取消后 refresh_token 即使在有效期也无法使用。
API 列表
接口名称 | 描述 |
my.getAuthCode | 获取用户授权码 |
alipay.system.oauth.token | 换取授权访问令牌 |
如果您在调用 API 时出现报错:
官方文档:传送门