在设计REST API或服务时,是否存在处理安全性(身份验证,授权,身份管理)的最佳实践?
构建SOAP API时,您需要使用WS-Security作为指南,并且有很多关于该主题的文献.我发现有关保护REST端点的信息较少.
虽然我理解REST故意没有规格类似于WS-*我希望最佳做法或建议的模式已经出现.
任何讨论或相关文件的链接将非常感谢.如果它的事项,我们将使用WCF与我们的REST API的/服务POX/JSON序列信息使用.NET Framework V3.5的建立.
RESTful身份验证的含义是什么?它是如何工作的?我无法在Google上找到一个很好的概述.我唯一的理解是你在URL中传递会话密钥(remeberal),但这可能是非常错误的.
背景:
我正在为REST Web服务设计身份验证方案.这并非"真正"需要安全(它更像是一个个人项目),但我希望尽可能安全地将其作为锻炼/学习体验.我不想使用SSL,因为我不想要麻烦,而且主要是设置它的费用.
这些SO问题对我开始特别有用:
我正在考虑使用简化版的Amazon S3身份验证(我喜欢OAuth,但它似乎对我的需求来说太复杂了).我正在为请求添加由服务器提供的随机生成的nonce,以防止重放攻击.
要回答这个问题:
S3和OAuth都依赖于对请求URL进行签名以及一些选定的标头.他们都没有签署 POST或PUT请求的请求体.这是不是容易受到中间人攻击,它会保留url和header并用攻击者想要的任何数据替换请求体?
看起来我可以通过在被签名的字符串中包含请求主体的哈希来防止这种情况.这样安全吗?
到目前为止,我读过的大多数教程都使用@EnableOAuth2Sso
而不是@EnableResourceServer
API网关.有什么区别?什么是OAuth2Sso
相反呢?
详细信息:我正在为基于Spring的微服务和单页应用程序实现安全/基础架构.有一段时间,虽然我们没有安全要求,但是在不同的主机(CORS方)上,SPA直接与开放式微服务进行了对话.
现在我使用spring-oauth
和添加一层安全性和网关模式spring-zuul
.所以我有一个服务(uaa-service)@EnableAuthorizationServer
和一个带@EnableZuulProxy
&的网关@EnableResourceServer
.我只需要密码授权类型,因此每个SPA都有自己的登录表单,并通过网关对uaa-service令牌端点进行身份验证,然后继续使用该令牌进行进一步的请求.
这种方法有什么问题吗?我应该用@EnableOAuth2Sso
吗?
我正在查看问题,但我找不到任何可以解决我怀疑的问题.我发现了有关JWT的大量信息,但在比较JWT在生成自定义令牌和针对REST服务的身份验证请求方面的优势时,并没有太多信息.
使用JWT(Json Web Token)生成自定义生成令牌有什么好处?要生成自定义令牌,我可以使用一些散列策略或一些独特的随机数生成器.
如果我生成自定义令牌,我可以有任何安全问题吗?您会建议使用任何其他身份验证机制吗?
谢谢!
我正在开发一个有一些要求的REST服务:
我目前提出的解决方案是拥有一个看起来像这样的自定义Authorization标头(这与amazon Web服务的工作方式相同):
Authorization: MYAPI username:signature
Run Code Online (Sandbox Code Playgroud)
我的问题是如何形成签名.当用户登录服务时,他们将获得一个密钥,他们应该能够使用该密钥对请求进行签名.这将阻止其他用户代表他们提交请求,但不会阻止他们伪造请求.
将要使用此服务的应用程序是一个iPhone应用程序,因此我认为我们可以在应用程序中嵌入一个公钥,我们可以进行额外的签名,但这是否意味着我们必须有两个签名,一个用户密钥和应用密钥的密钥?
任何建议都将不胜感激,我非常希望第一次能够做到这一点.
authentication rest authorization http-headers rest-security
在我们公司,我们部署了多个使用CAS服务器通过SSO保护的Web应用程序.用户请求应用程序的URL,如果尚未经过身份验证,则会重定向到CAS服务器登录页面.在成功验证的情况下,用户将被重定向回最初请求的URL.常见的工作流程,完美运作
但是,我们还希望使用CAS Server保护我们的REST Apis.我们的首选流程如下:
听起来像OA服务器,CAS服务器确实支持,除了不要求用户随时提供凭据,但我们也想为服务提供身份验证,即调用我们的API的其他应用程序:
我们希望我们的REST Api应用程序对用户凭据一无所知,甚至无法访问用户数据库,这对于使用该应用程序的人来说效果很好(重定向到CAS登录页面).
我不知道如何在不必大量定制CAS服务器的情况下实现此流程并自行实现此行为.
谷歌使用JWT for OAuth 2.0用于服务器到服务器应用程序,这似乎是要走的路.
如果有人能提供一些提示或替代方案(对CAS服务器),我将不胜感激.也许有人已经使用CAS服务器实现了这种模式,并且可以提供有关此问题的一些信息.
最诚挚的问候,Marco
我正在尝试为REST端点提供安全性.我正在按照本页的说明操作.在我的情况下,我没有视图,因此我没有创建控制器来指定视图,也没有在我的AppConfig.java中添加viewResolver
实现后,它在调用安全的REST端点时正确显示访问被拒绝错误.但即使我在请求标头中指定了用户名/密码,我也会收到拒绝访问错误.我正在测试基本身份验证中的邮递员设置用户名/密码.我有什么想法?
ws-security authorization restful-authentication spring-security rest-security
我正在为我的webapplication编写客户端,并且我使用我的开发人员证书签署了发布jar,如何验证请求休息服务来自我签名的jar?
我试图了解如何使用restful客户端为经过身份验证的用户实现安全性.我遇到麻烦的情况是如何阻止用户更新不属于他自己的购买,因为宁静的客户通过了购买ID.对于熟练的用户,产品id可以容易地被篡改.由于使用https可以阻止或减轻它,因此我并不感兴趣.我真的对试图更新不属于他们的用户感兴趣.
你如何在其他世界阻止这种攻击?Web参数篡改
我们当前的 REST API 实现使用 queryString 中的 apiKey 来处理所有类型的请求(PUT、POST、GET)。我觉得这是错误的,但无法解释原因(也许 apiKey 可以在服务器和客户端之间的某个地方兑现)。就像是:
POST /objects?apiKey=supersecret {name: 'some'}
那么,这是一个安全问题吗?请描述 HTTP 和 HTTPS 连接情况
当我Restservices
使用 java等创建时GET
,POST
我请求它们使用
http protocol
. 当我使用 https 时,就会出现错误。
例如: http://localhost:8080/demorest/webapi/aliens
工作正常。
但是当我使用相同的查询时https
https://localhost:8080/demorest/webapi/aliens
Run Code Online (Sandbox Code Playgroud)
我收到错误site can not provide secured connection
需要进行哪些修改才能使它们与https
.
rest-security ×12
rest ×7
security ×4
java ×3
jwt ×2
spring ×2
amazon-s3 ×1
cas ×1
http-headers ×1
https ×1
oauth ×1
oauth-2.0 ×1
spring-cloud ×1
wcf ×1
web-services ×1
ws-security ×1