许多API我发现使用相同的方法进行身份验证:
签名是一条HMAC- API 256编码的消息,其中包含nonce、customer ID (在这里可以找到)和API密钥。必须使用API密钥生成的秘密密钥生成HMAC- that 256代码。此代码必须转换为它的十六进制表示形式(64个大写字符)。
https://www.bitstamp.net/api/
我认为,为了使其工作,服务提供者必须保持API的秘密副本,然后他可以检查用户是否使用相同的秘密来生成签名。
我认为它非常不安全,就像在数据库中存储一个简单的密码一样。任何获得旧数据库备份的人都有所有用户的秘密。
我错过了什么吗?有一种用于服务
在过去的几天里,我一直在玩一个简单的应用程序的想法,因为我试图教自己REST认证的基本知识。
到目前为止,我发现最好的方法是使用类似Amazon使用的HMAC实现。
我最关心的是我应该如何对用户和进行身份验证,给他们他们的私钥,这样他们才能开始对HMAC进行签名?我一直读到,用于签署HMAC的私钥不应该通过有线发送,但是他们最初是如何获得的呢?
我的想法是这样的,但我不确定这是否正确。
用户数据库表:
users (simplified, this would probably be a private key per client app?)
id (their public key?)
我们的客户希望我们实现一个可信的子系统设计,这意味着他们有他们的Azure AD (客户端AD)来授权用户为前端服务。并要求我们使用我们自己的Azure AD (Dev AD)来授权前端到后端。我们管理来自Cliend的授权流(使用角-msal库),没有任何问题。我们得到一个访问令牌并被授权进入前端。但是,我需要使用client_secret,application_id.从(Dev )请求另一个访问令牌,而不需要用户交互()。能够调用安全API (我们的后端)。我后台的人就是这么提议的。因此,在此之后,他们可以在后端验证第二个access_token,并向客户端提供安全数据。我的问题是:这是