FROM : https://docs.blockstack.org/develop/add_auth.html
将Blockstack Auth添加到DApp的方式取决于您的应用程序是一个现代的去中心化的Blockstack应用程序,其中代码运行在没有受信任服务器的客户端,还是一个受信任服务器的传统客户端-服务器应用程序。
客户端应用程序中的身份验证
— 默认的流
— 自定义流
客户机-服务器应用程序中的身份验证
客户端应用程序中的身份验证
这种方法适用于去中心化的客户端应用程序,在这些应用程序中,用户的信任区域(用户信任的应用程序的一部分)以在他们自己的计算机上运行的代码开始和结束。在这样的应用程序中,应用程序与外部服务器等不在自己计算机上的任何代码交互,都不需要知道它们是谁。
Blockstack.js提供API方法,帮助您在客户端应用程序中实现blockstack身份验证。
默认的流程
在这些应用程序中实现身份验证的首选方法是使用默认流程。这个流程将身份验证封装在几个函数调用之后,使它能够非常快速地启动和运行。
默认流程使用以下四个函数:
- UserSession.redirectToSignIn
- UserSession.isSignInPending
- UserSession.handlePendingSignIn
- UserSession.loadUserData
当您的应用程序想要启动登录过程时,通常当用户单击带有Blockstack按钮的登录时,您的应用程序将调用UserSession.redirectToSignIn。这将创建一个临时传输密钥,并将其存储在web浏览器的localStorage中。然后,该函数用于创建身份验证请求令牌。blockstack浏览器将用户重定向到blockstack浏览器以批准请求中的签名。
当用户批准请求中的签名时,blockstack浏览器将签名的authResponse令牌返回给UserSession.redirectToSignIn中指定的redirectURI。
要检查这个令牌是否存在,应用程序应该调用UserSession.isSignInPending。如果返回true,应用程序应该调用UserSession.handlePendingSignIn。这将解码令牌,返回登录用户的数据,并同时将其存储到localStorage,以便稍后使用loadUserData检索它。
import * as blockstack from ‘blockstack’
var userSession = new UserSession()
if (userSession.isSignInPending()) {
userSession.handlePendingSignIn()
.then(userData => {
const profile = userData.profile
})
}
默认情况下,这些方法使用store_write作用域,允许DApp读取用户配置文件并为DApp读取/写入用户数据。要指定不同的范围,请使用AppConfig对象。
自定义流程
或者,您可以使用UserSession生成自己的传输私钥和/或身份验证请求令牌。makeAuthRequest函数。该函数使您能够更好地控制身份验证体验。例如,您可以更改sign in experience,以便它提示尚未创建blockstack标识的用户选择hub URL。
makeAuthRequest()方法接受以下参数:
transitprivatekey(string = generateandstoretransitkey())
一种十六进制编码的传输专用密钥。
redirecturi(string =
${window.location.origin}/
)
位置,以将用户重定向到登录批准后的位置。
manifesturi(string =
${window.location.origin}/manifest.json
)
此应用程序的清单文件的位置。
scopes (array = default_scope)
应用程序请求的权限。
appdomain(string = window.location.origin)
这个应用程序的起源。
expiresat(number = nexthour().gettime())
The time at which this request is no longer valid.
extraparams(object = {})
要传递给验证器的任何额外参数。使用它来传递不属于blockstack身份验证规范的选项,但可能受到特殊身份验证器的支持。
例如,您可以使用以下代码在https://alice.example.com或https://bob.example.com上为运行在origin https://example.com上的应用程序生成身份验证请求。
const transitPrivateKey = generateAndStoreTransitKey()
const redirectURI = 'https://example.com/authLandingPage’
const manifestURI = 'https://example.com/manifest.json’
const scopes = ['scope_write', ‘publish_data’]
const appDomain = 'https://example.com’
const authRequest = makeAuthRequest(transitPrivateKey, redirectURI, manifestURI, scopes, appDomain)
redirectToSignInWithAuthRequest(authRequest)
客户机-服务器应用程序中的身份验证
Note
客户机-服务器身份验证需要使用服务器应用程序语言编写的库。blockstack.js中有一些私有方法可以在node.js服务器应用程序上实现这一点,但它们目前不属于我们支持的公共API的一部分。
在客户机-服务器应用程序中使用blockstack身份验证与客户机-服务器应用程序非常相似。您可以使用上面描述的相同代码在客户机中生成身份验证请求。
主要区别在于,您需要在用户批准登录到应用程序后在服务器上验证身份验证响应令牌。
有关如何在服务器端进行验证的示例,请查看blockstack-ruby库。
————————————————————————————————————
image.pngRebase是一个全球性的去中心化组织,致力于帮助极客更好地利用科技创新,推动社会变革。Rebase社区聚集着一群拥有不同技能的人,他们通过贡献自己的时间和智慧来为社区的发展添砖加瓦,用实际的行动来尝试社区和社会自治的可能。
网友评论