Web services 基于HMAC的安全集中式身份验证服务

Web services 基于HMAC的安全集中式身份验证服务,web-services,http,authentication,web,https,Web Services,Http,Authentication,Web,Https,我需要集中对rest web服务的身份验证,并使我们所有的web服务都具有相同的身份验证。所以我开始编写一个外部web服务来处理身份验证 为了保持兼容性,由于身份验证是在单个请求旁边使用HMAC签名(使用私钥签名)执行的(因此没有任何类型的令牌),因此我想让所有web服务发送传入请求中包含的HMAC和StringToSign(用于生成HMAC的数据表示) 因此,授权服务(知道私钥)可以尝试组合相同的签名,如果匹配,则回答为200ok,并回答为JSON对象“authorized” 所有这些通信都是

我需要集中对rest web服务的身份验证,并使我们所有的web服务都具有相同的身份验证。所以我开始编写一个外部web服务来处理身份验证

为了保持兼容性,由于身份验证是在单个请求旁边使用HMAC签名(使用私钥签名)执行的(因此没有任何类型的令牌),因此我想让所有web服务发送传入请求中包含的HMAC和StringToSign(用于生成HMAC的数据表示)

因此,授权服务(知道私钥)可以尝试组合相同的签名,如果匹配,则回答为
200ok
,并回答为JSON对象“authorized”

所有这些通信都是通过HTTPS进行的,但我正在试图弄清楚如果有人截取或修改这个答案,将
403禁用
变成
200 OK
,会发生什么

我应该用某种方式来确认这是最初的答案吗?如果是,我该怎么办

我同意CA发布的ssl证书是安全的,但我如何确保我的HTTPS层没有被破坏,从而允许攻击者修改授权响应

另外,请提供一些标准解决方案(如果有的话),我不希望它与我现在使用的技术相关,因为每个服务都可能使用自己的堆栈,我不希望它是.NET或其他什么,因为身份验证机制有一个专有的实现

所有这些通信都是通过HTTPS进行的,但我想弄清楚 如果有人截取或修改这个答案会发生什么

这就是HTTPS中的S的作用:消息的SSL保证。如果攻击者伪造请求,客户端将注意到它


您可以询问专家。

服务如何选择正确的秘密来验证HMAC?请求是否包含某种类型的
From:user
字段?授权标头包含执行操作的客户端的公钥(id),与Amazon S3非常相似,例如
Authorization:PUBLICKEY:SIGNATURE
。要指定要访问资源的用户,我正在使用以下URI
/user/:user\u id/authorization
。这允许客户端访问另一个用户拥有的资源,如果实际上我不需要它,这是一个很好的起点。因此,服务将根据授权标头本身中指定的公钥知道什么是秘密。如果您有任何建议,请告诉我。让我们看看我是否理解:当Bob想要查看Alice的个人资料时,其客户请求
/user/Alice/profile
。此服务反过来授权Bob对
/user/alice/authorization
的请求,并发送一个额外的头,如
Auth:Bob:profile
。这是您当前的设计吗?TBH我还没有实现请求另一个用户拥有的资源的机会(但我这样做的动机之一是为该用户提供未来的支持),所以实际上它希望同一个用户是执行身份验证的用户(选择与URI本身内指定的私钥相关的私钥)。您提出了一个我没有考虑过的好问题。通过对任何资源执行请求,例如
/user/alice/profile
,客户端将附加一个授权头,指定是谁,例如:
授权:BOB:SIGNATURE
。然后配置文件服务将转发请求(在执行任何请求的操作之前)到授权服务,到URI
/user/alice/Authorization/
将签名和stringToSign作为GET-params发送。是的,我缺少一种方法来判断谁在请求操作…也许另一个GET-param会更好。好的,所以我不必担心流操作,因为完整性是在较低的级别(HTTP)完成的级别,我说的对吗?如果是这样的话,我想的就简单多了:-)因为这个Web服务也可以通过internet进行通信,将HMAC+StringToSign发送到授权服务,我害怕错过一些可能导致安全漏洞的东西。顺便说一句,这已经提高了我们的安全性,因为使用这种设计,我们只有一个服务知道用户凭据。集中身份验证和授权可以提高应用程序的可管理性,而不是安全性,因为如果机密被泄露,那么您的所有应用程序都会被泄露。另外,在互联网上进行授权会带来延迟并降低用户体验——但由于我不知道要求,可能无法用其他方式进行授权。另外,请注意,授权服务器直接暴露于Internet