当前位置: 首页 > news >正文

网站开发的接口文档长沙网站排名公司

网站开发的接口文档,长沙网站排名公司,长沙官网优化多少钱,网页定制开发费用目录 什么是 Digest Access Authentication 认证 Digest Access Authentication 认证的原理 Digest Access Authentication 认证的安全性 使用 Golang 实现 Digest Access Authentication 使用建议 小结 HTTP API 认证技术主要用于验证客户端身份#xff0c;并确保只有经…目录 什么是 Digest Access Authentication 认证 Digest Access Authentication 认证的原理 Digest Access Authentication 认证的安全性 使用 Golang 实现 Digest Access Authentication 使用建议 小结 HTTP API 认证技术主要用于验证客户端身份并确保只有经过授权的实体才能访问受保护的资源。随着安全需求的日益增长API 认证技术也在不断发展和演进。本文将详细讲解 Digest Access Authentication 认证技术。 什么是 Digest Access Authentication 认证 Digest Access Authentication 是一种基于 HTTP 协议的身份验证机制通过数字摘要来验证用户的身份相较于基本认证Basic Authentication使用用户名密码的方式提供了更高的安全性和灵活性。在 Digest 认证中不会直接发送密码而是发送摘要信息这样即使在非安全的通道上也不会因被截获数据而泄露密码。 Digest Access Authentication 认证的原理 Digest Access Authentication 认证使用一种挑战-响应机制来进行身份验证。当用户尝试访问受保护的资源时服务器会向客户端发送一个挑战challenge要求客户端提供有效的身份验证信息。客户端收到挑战后使用用户的凭证和约定的摘要算法生成摘要信息。客户端将摘要信息随请求内容发送给服务器服务器使用相同的密钥对响应进行验证。Digest 认证的流程通常如下 客户端请求: 客户端发起请求到服务器。服务器返回一个认证挑战返回 401 Unauthorized 状态码及 WWW-Authenticate 头其中包含认证类型Digest、随机生成的 nonce 值以及其他必要参数如 realm 等。WWW-Authenticate 的值示例如下 Digest realmmyrealm, qopauth, nonceunique-nonce, opaque0000000000000000 客户端响应: 客户端收到对应的相应信息后使用用户名、密码、nonce、请求方法、请求的 URI 和其他参数计算一个摘要并将其与认证请求一起发送给服务器。header 中 Authorization 的值示例如下 Digest usernameuser1, realmmyrealm, noncedcd98b7102dd2f0e8b11d0f600bfb0c093, uri/protected, qopauth, nc00000001, cnonce0a4f113b, responsedd51a70556e6a3342945ef0feac79afb, opaque 服务器验证: 服务器使用存储的密码和客户端发送的参数计算摘要如果与客户端发送的摘要匹配则认证成功。 Digest Access Authentication 认证的安全性 Digest Access Authentication 认证方式与 Basic Authentication 认证方式相比安全更高因为 不会发送明文密码。可以使用随机数防止重放攻击。可以结合使用质询/响应机制进一步提高安全性。 但是 Digest Access Authentication 认证并方式不是完全安全的依然存在以下缺陷 如果摘要数据被攻击者截获密码可能会被离线破解。不提供消息完整性和机密性保护因此最好与 HTTPS 结合使用。 使用 Golang 实现 Digest Access Authentication 服务端简单示例代码如下 package mainimport (crypto/md5fmtionet/httpstrings )const (// 为了举例的目的暂时先写死实际编码中不要写死Realm myrealmQOP authNonce dcd98b7102dd2f0e8b11d0f600bfb0c093Opaque 5ccc069c403ebaf9f0171e9517f40e41User user1Password mypassword )func computeMD5Hash(text string) string {hasher : md5.New()io.WriteString(hasher, text)return fmt.Sprintf(%x, hasher.Sum(nil)) }func parseAuthorizationHeader(header string) (username, realm, nonce, uri, qop, nc, cnonce, response string) {fields : strings.Split(header[6:], , )parts : make(map[string]string)for _, field : range fields {pair : strings.SplitN(field, , 2)if len(pair) 2 {fmt.Println(strings.TrimSpace(pair[0]))parts[strings.TrimSpace(pair[0])] strings.Trim(pair[1], )}}return parts[username], parts[realm], parts[nonce], parts[uri], parts[qop], parts[nc], parts[cnonce], parts[response] }func checkAuth(r *http.Request) bool {authHeader : r.Header.Get(Authorization)if authHeader {return false}username, realm, nonce, uri, qop, nc, cnonce, response : parseAuthorizationHeader(authHeader)// HA1 MD5(username:realm:password)HA1 : computeMD5Hash(fmt.Sprintf(%s:%s:%s, username, realm, Password))// HA2 MD5(method:digestURI)HA2 : computeMD5Hash(fmt.Sprintf(%s:%s, r.Method, uri))// response MD5(HA1:nonce:nonceCount:cnonce:qop:HA2)validResponse : computeMD5Hash(fmt.Sprintf(%s:%s:%s:%s:%s:%s, HA1, nonce, nc, cnonce, qop, HA2))return response validResponse }func protectedHandler(w http.ResponseWriter, r *http.Request) {if checkAuth(r) {w.Write([]byte(Youre in the protected area))} else {w.Header().Set(WWW-Authenticate, fmt.Sprintf(Digest realm%s, qop%s, nonce%s, opaque%s, Realm, QOP, Nonce, Opaque))w.WriteHeader(http.StatusUnauthorized)w.Write([]byte(401 Unauthorized\n))} }func main() {http.HandleFunc(/protected, protectedHandler)http.ListenAndServe(:8080, nil) } 使用 Golang 模拟客户端代码如下 package mainimport (crypto/md5fmtionet/http )const (Username user1Password mypasswordRealm myrealmNonce dcd98b7102dd2f0e8b11d0f600bfb0c093NC 00000001CNonce 0a4f113bQOP authURI /protectedMethod GET )func computeMD5Hash(text string) string {hasher : md5.New()io.WriteString(hasher, text)return fmt.Sprintf(%x, hasher.Sum(nil)) }func createDigestAuthorizationHeader() string {// HA1 MD5(username:realm:password)HA1 : computeMD5Hash(fmt.Sprintf(%s:%s:%s, Username, Realm, Password))// HA2 MD5(method:URI)HA2 : computeMD5Hash(fmt.Sprintf(%s:%s, Method, URI))// response MD5(HA1:nonce:NC:cnonce:qop:HA2)response : computeMD5Hash(fmt.Sprintf(%s:%s:%s:%s:%s:%s, HA1, Nonce, NC, CNonce, QOP, HA2))return fmt.Sprintf(Digest username%s, realm%s, nonce%s, uri%s, qop%s, nc%s, cnonce%s, response%s, opaque,Username, Realm, Nonce, URI, QOP, NC, CNonce, response) }func main() {client : http.Client{}req, err : http.NewRequest(Method, http://localhost:8080URI, nil)if err ! nil {panic(err)}fmt.Println(createDigestAuthorizationHeader())req.Header.Set(Authorization, createDigestAuthorizationHeader())resp, err : client.Do(req)if err ! nil {panic(err)}defer resp.Body.Close()if resp.StatusCode http.StatusOK {fmt.Println(Successfully authenticated.)} else {fmt.Println(Failed to authenticate.)} } 先运行服务端代码在运行客户端代码可以发现验证成功。 使用建议 Digest Access Authentication 认证方式相比 Basic Authentication 认证方式的安全性有一定的增强但也不建议使用。如果非要使用的话仅限于以下几种对安全要求不是特别高的场景 简单的内部应用如果你正在开发一个只有少数用户使用的内部工具而这些用户都是可信的那么 Basic Authentication 可以作为一个简单的解决方案。快速原型开发在初期的开发阶段当需要快速实现认证机制的时候Basic Authentication 可以作为一种临时措施。服务端之间的通信当两个服务端之间需要进行简单的身份验证时可以使用 Basic Authentication最好是双方都处于安全的内部网络中。对于安全性要求不太高的系统但又想要比基本认证更安全的场景 如果真的采用了 Digest Access Authentication 认证方式可以考虑添加如下增强措施 配置服务器支持 HTTPS提供安全的通信环境。使用强随机数生成算法来生成 nonce 值保证 nonce 的随机性。 小结 Digest Access authentication 作为一种安全认证机制可以有效地提高 Web 应用的安全性。相较于 Basic Authentication 认证方式虽然安全性有所提高但实际的安全性依然比较低仅适用于那些对安全要求不是特别高的场景。
http://www.pierceye.com/news/708020/

相关文章:

  • 自己做的网站别人打不开网络系统建设与运维职业技能等级证书
  • 签名能留链接的网站数据库网站建设公司
  • 网站权重不够高 导致创建网站销售产品
  • 中国建设报网站做网站如何文字链接文字
  • 网站建设网站多少钱网站上做值机的app
  • 百度手机网站提交做网站优化的教程
  • wordpress建站教程贴吧网站建设的论文的参考文献
  • 公司网站设计建议php7 wordpress
  • 商城网站建设策划书扬中会建网站
  • 铜陵市网站建设如何建立小程序商城
  • 大型网站运营步骤做网站f12的用处
  • 静态网站什么意思微信开发者工具打不开
  • 建站到网站收录到优化通化北京网站建设
  • 网站开发作用wordpress mysuc cms
  • 网站开发人员的职责是什么石家庄外贸建站公司
  • 内外外贸购物网站建设网站顶部下拉广告
  • 深圳企业网站建设服务平台销售推广语
  • 做网站要什么资料百度网盘登录
  • 聚牛网站建设公司北京seo优化推广
  • 成都网站公司网站建设东莞大岭山电子厂
  • python建立简易网站网站界面设计的分类有哪几种
  • 网络规划师考哪些内容优化设计卷子答案
  • 邢台网站关键词优化wordpress弹窗下载
  • 晋城市企业网站腾讯qq官网登录入口
  • 怎么给网站在百度地图上做爬虫一家专门做灯的网站
  • 河南焦作有做网站开发的公司吗xampp安装wordpress
  • python购物网站开发流程图win淘宝客wordpress主题模板
  • 江苏省建设执业网站个人做淘宝客网站有哪些
  • 浙江省建设厅门户网站咨询公司是干什么的
  • 哪个网站上可以做初中数学题wordpress 网校插件