帮助文档
OAuth客户端使用指南
子敬
2021.06.28 13:45发布于帮助文档
2.01k0

BBScloud授权登录第三方应用

如果希望利用BBScloud授权登录您的其他应用,请创建OAUTH客户端,基于OAUTH2.0协议引导BBScloud向其他网站授权。

创建OAuth客户端

image.png

名词解释

1 应用名称

您可以设置您的应用名称,这将会显示在您的应用请求授权的页面上;

2 安全域名

在这里需要您设置可用的安全回调域名;授权前我们会验证您的域名是否合法;只有配置安全域名才能够回调成功。域名不需要要包含https://或http,我们推荐使用配置具备ssl证书的域名。

示例: www.bbscloud.com

配置成功

配置成功后您将获取到 app_idapp_secret请妥善保管您的密钥。它将成为您访问的必要验证参数。

对接OAuth客户端

请求url地址,如果您使用的是创建站点是分配的域名或修改的二级域名,例如 1000001.bbscloud.comb.bbscloud.com,在请求的时候请求url对应的就是上面的地址,如果您使用的是您自己的域名,请求地址就是* https://youdomain.com*,示例 https://bbs.jielingguanjian.com

1 获取Authorization Code

1.1 请求描述

  1. 请求方式:post
  2. 请求地址:/api/sso/oauth_code
  3. 编码格式: application/json
参数名称 参数类型 是否必填 备注
client_id String 配置OAuth时分配的app_id
client_secret String 配置OAuth时分配的app_secret
response_type String 固定值code

1.2 返回结果描述

字段名 字段类型 备注
type int 请求返回值,正常情况会返回1
data String code值,返回状态为1时会给您返回code
description String 描述文字,当type不为1时我们会返回对应的错误信息

1.3 返回结果示例

{ "type": 1, "data": "3b9997523f7a49e8ae5811c6dc1efdd5", "description" : "" }

2 登录授权

根据获取到的code您可以拼接授权访问链接,并跳转至这个地址,示例:

/loginAuth?client_id=[YOUR_APPID]&response_type=code&code=[code}&redirect_uri=[YOUR_REDIRECT_URI]&state=hello

如果用户已经有登录态,会出现一个确认页。如果还没有登录,会先进行登录,如下图所示:

image.png

如果用户点击“授权并登录”,则成功跳转到指定的redirect_uri,并跟上Authorization Token(注意此token会在5分钟内过期)。
例如回调地址是:www.bbscloud.com/callback,则会跳转到:

https://www.bbscloud.com/callback?token=520DD95263C1CFEA0870FBB66E******

3 根据Token获取用户信息

1.1 请求描述

  1. 请求方式:get
  2. 请求地址:/api/sso/userInfo
  3. 编码格式: multipart/form-data
参数名称 参数类型 是否必填 备注
access_token String 通过callback得到的token

1.2 返回结果描述

字段名 字段类型 备注
id String 用户Id
userName String 用户名
accountEmail String 用户邮箱(可能为空)
accountMobile String 用户手机号
error String 错误码,正常返回 0
error_description String 错误描述

1.3 返回结果示例

{ "error" : 0, "id" : 'c306ffce817b495684db86b0993462cd', "userName" : "张三", "accountEmail" : "aaa@zzz.com", "accountMobile" : "18888888888", "avatar" : "377609792979603456.png" }

1.4 错误码对应关系

错误码 描述 解决方案
-1 授权版本过低,不允许三方登录 升级到专业及以上版本
-2 调用接口凭证无效 access_token已过期,重新发起登录授权
-3 用户不存在

示例代码.net

/// <summary> /// 跳转到站点授权页获取授权信息 /// </summary> /// <returns></returns> [AllowAnonymous] public ActionResult LoginAuth() { var code = GetAuthorizationCode(); if (string.IsNullOrEmpty(code)) { return Redirect("/"); } return Redirect($"{domain}/loginAuth?client_id={appId}&response_type=code&code={code}&redirect_uri=http://192.168.0.140/account/callback&state=hello"); } /// <summary> /// 获取AuthorizationCode /// </summary> /// <returns></returns> private string GetAuthorizationCode() { HttpClientHandler handler = new HttpClientHandler(); ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls; using (HttpClient client = new HttpClient(handler)) { client.BaseAddress = new Uri($"{domain}"); client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"); client.DefaultRequestHeaders.Add("Accept", "*/*"); var param = new AuthorizationCodeRequest { client_id = appId, client_secret = appsecret, response_type = "code" }; var jsonData = JsonConvert.SerializeObject(param); var content = new StringContent(jsonData, Encoding.UTF8, "application/json"); var response = client.PostAsync("/api/sso/oauth_code", content).Result; response.EnsureSuccessStatusCode(); string resultString = response.Content.ReadAsStringAsync().Result; var result = JsonHelper.JsonToEntity<AuthorizationCodeResponse>(resultString); return result.data; } }

OAuthDemo.zip 2.22MB

对我有用 2
收藏
手机查看
举报
SSO单点登录使用指南
0个评论
倒序看帖
仅看楼主

暂无数据