本文记录,外部系统调用salesforce时两种认证方式。这两种认证方式都是salesforce提供的标准接口oauth2。
1. 账号密码认证,直接拿到token
代码语言:txt复制接口地址:
https://test.salesforce.com/services/oauth2/token
调用方式:
POST
参数:
grant_type: password
client_id: xxx
client_secret: xxx
username: xxx
password: xxx
参数名 | 内容 |
---|---|
grant_type | password |
client_id | |
client_secret | |
username | |
password |
此种方法因账号密码明文传输,在实践中并不安全。因此第二种方式:
2. sf跳转到回调地址拿到code,用code换取token
1.调用authorize接口,重定向到salesforce标准登陆页面
代码语言:javascript复制接口地址:
https://test.salesforce.com/services/oauth2/authorize
调用方式:
POST
参数名 | 内容 |
---|---|
grant_type | authorization_code |
response_type | code |
client_id | |
redirect_uri | 回调地址 示例:https://example.com/callback |
scope | full |
code_challenge | code_verifier 为 随机字符串 sha-256加密后获得code_challenge 。code_verifier在后续的流程中会用到 |
code_challenge_method | S256 |
state | helloworld (这个参数可以带过去) |
2.用户自行输入密码
3.若用户的账号密码在salesforce认证成功,saleforce自动重定向到已经配置好的回调地址,并附带一个code
代码语言:txt复制跳转到回调地址:
https://example.com/callback?code=aPrxKeZrWIbgtFNnEb3YmaVOvrOtFAk_ffCgAanAA4n3mslDgD7i6jfQgJGsXb9yOLXgR1hpaQ==
java服务拿到code
4.此回调地址的服务器拿到code,可以调用services/oauth2/token接口换取token
代码语言:txt复制接口地址:
https://test.salesforce.com/services/oauth2/token
调用方式:
POST
参数名 | 内容 |
---|---|
grant_type | authorization_code |
code | aPrxKeZrWIbgtFNnEb3YmaVOvvEYouoUysW2fp3SpWuT3y78EjcIc3WXxdXVtoKcJMwOK003MA== |
client_id | |
client_secret | |
redirect_uri | 回调地址 必须与第一步一致一致 |
code_verifier | code_verifier 为 随机字符串 sha-256加密后获得code_challenge 。code_verifier在后续的流程中会用到 |
两种认证方式的区别:
1. 账号密码方式更简便,回调地址方式更安全。
2. 账号密码方式拿到的token无法refresh。回调地址拿到的token可以继续调用refresh接口,做到刷新token,可以实现登录状态持久化的效果。
3. 若salesforce配置了单点登录sso流程,那么在通过登录中心登录的用户,只能通过回调地址方式认证。
下一篇记录单点登录sso过程中,跳转回salesforce后获取token的方式。