用户授权
用户在 PRS 注册时,PRS 会产生一对密钥,我们称之为 Root Key。Root Key 由用户或者由 PRS 代为保存,只有拥有私钥才可以进行创建签名、运行合约等操作。
由于 DApp 没有用户的私钥,如果此时 DApp 也需要帮用户进行签名等操作,那么根据 PRS 协议的规定,DApp 可以通过数字签名的方式,进行授权从而获取签名文件等权限,这个过程我们称之为用户授权。
下面是用户授权的过程是:
- 生成一对新的密钥,我们称之为 Sub Key。
- 用户使用 Root Key 遵照 PRS 协议,对 Sub Key 进行数字签名。
- 签名成功及授权成功,此时 Sub Key就拥有了创建签名和运行合约的权限。
Web 端授权
为了简化授权的流程,PRS 提供了 Web 授权页面页面,开发者只要引导用户跳转到指定授权页面即可。用户在授权页面确定授权后,页面会回调至 REDIRECT_URL/?code=CODE
,此时开发者可以拿到对应的 code 换取 access token。
以下是 Web 授权的步骤:
- 获取 Web 授权地址,引导用户跳转至 PRS 提供的授权页面。
https://${host}/developer/apps/${address}/authorize
- 'host': 主站域名,正式环境为
https://press.one
,测试环境为https://beta.press.one
。 - 'address': DApp 在 PRS 中的唯一标识,创建 DApp 后可获取到 address。
- 用户跳转至授权页面后,如下图。会在页面中显示 DApp 的相关信息以及权限范围,如果用户点击确认授权,页面将跳转至
REDIRECT_URL/?code=CODE
,开发者即可以获取返回的 code 来换取 access token。
REDIRECT_URL
: 创建 DApp 时填入的授权回调 Url。code
: 开发者可以获取获取 code,使用该 code 换取 access token
- 使用 DApp 的
address
和privateKey
,通过 SDK 换取 access token。
//Node.js Example
const authRes = await client3.dapp.authByCode(code, appAddress, appPrivateKey);
- 使用授权后的 token 即可进行签名发布文件、创建合约等操作。
授权流程图
DApp auth api
下面是 SDK 提供的 DApp 相关的 api,开发者可以直接调用。
getAuthorizeUrl
根据 DApp address
获取用户的 Web授权地址,引导用户跳转至该页面即可进行授权。
getAuthorizeUrl(appAddress)
appAddress
: Dapp 地址
//Node.js Example
const webAuthorizeUrl = client1.dapp.getAuthorizeUrl(appAddress);
authByCode
用户在 Web 授权地址上点击确认授权后,会跳转至开发者创建 DApp 时填写的授权回调 URL,同时会带上授权 code,开发者获取该 code,然后使用 DApp 的私钥,即可换取 Access Token,拥有 Access Token,DApp 就可以帮用户创建签名、提交合约了。
authByCode(code, appAddress, appPrivateKey)
code
: 用户同意授权后返回的 code。appAddress
: Dapp address。appPrivateKey
: Dapp privateKey。
```javascript
//Node.js Example
const authRes = await client3.dapp.authByCode(code, appAddress, appPrivateKey);
const authAddress = authRes.body.appAuthentication.authAddress;
const token = authRes.body.token;