api - Web api 将名称和密码设置为 request.BasicAuth

标签 api authentication go

登录认证的路由——app.Handle("GET", "/v1/users/token", u.Token) .

我们可以从 request.BasicAuth 中获取名称和密码。

func (u *User) Token(ctx context.Context, w http.ResponseWriter, r *http.Request, params map[string]string) error {
    ...
    name, pass, ok := r.BasicAuth()
    ...
}

但是如何设置名称并从客户端网址传递?

最佳答案

在浏览器要求用户提供基本身份验证凭据之前,您必须拒绝请求访问(使用状态码 401 Unauthorized)。您应该设置标题 WWW-AuthenticateBasic realm="Your message" .
另见 this article .

所以在你的代码中,当 ok是错误的,您应该拒绝该请求:

func (u *User) Token(ctx context.Context, w http.ResponseWriter, r *http.Request, params map[string]string) error {
    ...
    name, pass, ok := r.BasicAuth()
    if !ok  {
         w.Header().Set("WWW-Authenticate", "Basic realm=\"Your message\"")
         http.Error(w, "Must supply authentication credentials", http.StatusUnauthorized)
         return
    }
}

关于api - Web api 将名称和密码设置为 request.BasicAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59518205/

相关文章:

javascript - Node.js 中的异步函数

生成空日志文件的 Java Logging API

python - 如何在同一个应用程序中拥有两个登录/身份验证策略?

go - 如何连接忽略空字符串的结构的字符串字段?

python - Go 中的字典

Golang 在交叉编译时无法在 x86_64 机器上链接 aarch64/arm64 二进制文件

php - Soundcloud (Oauth2) API 获取访问 token 失败

api - Bing 搜索 API 在您的市场中不可用

c# - SSLStream 相互认证

svn - Subversion 用户删除