Web开发

首页 » 常识 » 诊断 » GoWeb开发生成认证token
TUhjnbcbe - 2022/4/6 18:36:00
上一篇文章我们介绍了API服务的认证方法,本节将实现POST/v1/tokens/authentication接口,该接口允许客户端通过发送凭证信息(email地址和密码)获取认证token。提示:为了简洁起见,在接下来的内容中,我们不再重复“有状态的身份验证token”这个词,而是将其简单地称为用户身份认证token。下面说明下处理用户发送的凭证信息,并获取认证token的大概流程:1、客户端发送JSON请求到POST/v1/tokens/authentcation接口,请求体中包含用户认证信息(email地址和密码)。2、服务端根据客户端发送的email地址,查询数据库对应用户信息,校验密码是否正确。如果校验失败,返回错误响应。3、如果密码正确,调用app.models.Token.New()方法生成一个过期时间为24小时的token,并将scope值设置为“authentication”。4、将认证token以JSON响应格式返回给客户端。下面从internal/data/tokens.go文件开始。需要更新该文件,定义新的常量"authentication",并添加结构体标签便于JSON序列化,如下所示:File:internal/data/tokens.go

packagedata...const(ScopeActivation="activation"ScopeAuthentication="authentication"//增加一个新的认证标识)//定义Token结构体接收token数据。包括token字符串和哈希值,以及用户ID,过期时间和范围。typeTokenstruct{Plaintextstring`json:"token"`Hash[]byte`json:"-"`UserIDint64`json:"-"`Expirytime.Time`json:"expiry"`Scopestring`json:"-"`}...这些结构体字段标签只有Plaintext和expiry字段需要序列化到Token结构体中,其他字段可以忽略。我们还将Plaintext字段重命名为“token”,因为这对客户端来说比plaintext更直观。总之,当我们将一个Token结构体编码为JSON时,结果将类似于:

{"token":"X3ASTT2CDAN66BACKSCI4SU7SI","expiry":"-01-18T13:00:25.+01:00"}接口创建现在我们进入本节重点,实现POST/v1/tokens/authentication接口到代码。当接口完成后,我们的API路由看起来像这样:MethodURLPatternHandler动作POST/v1/tokens/authenticationcreateAuthenticationTokenHandler生成一个新的认证token如果你跟随本系列文章操作,请创建新的cmd/api/tokens.go文件:

$touchcmd/api/tokens.go在这个文件当中,我们需要创建createAuthenticationTokenHandler处理程序。本质上这个接口处理程序的目标是根据收到的用户email地址和密码生成一个认证tokens返回给客户端。File:cmd/api/tokens.go

packagemainimport("errors""greenlight.alexedwards.net/internal/data""greenlight.alexedwards.net/internal/validator""net/

1
查看完整版本: GoWeb开发生成认证token