有很多指南,示例代码显示如何使用Spring Security保护REST API,但大多数都假设一个Web客户端并谈论登录页面,重定向,使用cookie等.甚至可能是一个简单的过滤器,检查HTTP标头中的自定义标记可能就足够了.如何实现以下要求的安全性?有没有任何gist/github项目做同样的事情?我对弹簧安全的了解有限,所以如果有更简单的方法来实现弹簧安全性,请告诉我.
我使用Springboot,spring security等.更喜欢使用Java配置的解决方案(没有XML)
rest restful-authentication spring-security stateless spring-boot
对于与IIS托管的RESTful WCF服务进行通信的Windows窗体应用程序,实现授权/身份验证的最佳方法是什么?
我问的原因是我非常困惑,在筛选出不同的文章和帖子后表达了不同的方法并最终在WCF安全最佳实践中找到了约650页的文档"(http://www.codeplex.com/WCFSecurityGuide)我是根据我的情况,我不确定哪种方法最好采取以及如何开始实施.
我从这篇文章"使用WCF 3.5设计和构建RESTful Web服务指南"(http://msdn.microsoft.com/en-us/library/dd203052.aspx)和RESTful WCF服务的PDC视频开始很棒,帮助我实现了我的第一个REST友好的WCF服务,
在我使用该服务后,我返回实施安全性,请参阅."安全注意事项"(页面下方四分之一)并尝试按照说明实现HTTP Authorization标头,但是我发现代码不完整(请参阅"UserKeys"变量从未声明的方式).这是我试图研究如何做到这一点的更多点(使用带有"授权"HTTP标头的HMAC哈希,但在谷歌上找不到多少?)它引导我阅读有关消息级安全性的其他文章,形成auth和自定义验证器,坦率地说,我不确定哪种方法最好,最合适.
所以说了这些(感谢听到现在!),我想我的主要问题是,
- 我应该使用哪种安全实施方案?
- 有没有办法避免每次WCF呼叫都发送用户名/密码?如果在开始时建立了连接,我宁愿不发送这些额外的字节,这将是在登录后允许进行后续调用之前.
- 如果我使用SSL,我是否真的应该关注除纯文本以外的任何内容?
如上所述,.NET 3.5 win表单应用程序,IIS托管的WCF服务,但重要的是我希望任何和所有WCF服务都需要此授权程序(但它应该是,session,http header或其他),因为我不希望任何人能够从网上获得这些服务.
我知道上面的帖子很大但是我必须表达我已经失败的路线以及我需要完成的任务,我们非常感谢所有的帮助.
PS:我也知道这篇文章如何使用用户名/密码+ SSL配置WCF的安全REST服务,如果社区建议我从REST转移到WCF服务,我可以这样做,但是我开始这样做以保持一致性任何公共API来.
我认为重要的是我说明了我如何访问我的WCF服务(联系服务正在运行,但验证凭据的最佳方法是什么 - 然后返回Member对象?):
WebChannelFactory<IMemberService> cf = new WebChannelFactory<IMemberService>(
new Uri(Properties.Settings.Default.MemberServiceEndpoint));
IMemberService channel = cf.CreateChannel();
Member m = channel.GetMember("user", "pass");
Run Code Online (Sandbox Code Playgroud)
代码是MS文章中的一半(以及我自己的一些用于测试):
public Member GetMember(string username, string password)
{
if (string.IsNullOrEmpty(username))
throw new WebProtocolException(HttpStatusCode.BadRequest, "Username must be provided.", null);
if (string.IsNullOrEmpty(password))
throw new WebProtocolException(HttpStatusCode.BadRequest, "Password must be provided.", null);
if (!AuthenticateMember(username))
{
WebOperationContext.Current.OutgoingResponse.StatusCode …Run Code Online (Sandbox Code Playgroud) 我正在使用ASP.Net Web Api实现RESTful Web服务.我已经得出结论,使用基本身份验证+ SSL来执行身份验证部分.实现它的最佳/正确方法是什么?
我的第一次尝试是手动执行,解析Authorization标头,根据我的数据库解码和验证用户.它有效,但我想知道我是否遗漏了一些东西.
我见过一些使用用户角色和主体的解决方案.虽然我不确定这些实际上做了什么,但我几乎肯定我不需要这些,因为在我的数据库中我定义了自己的用户和他们的角色.
我还没有完全理解的是,服务的消费者是否必须在每个请求中发送凭据,或者以某种方式缓存它们.我的服务是否应该为了实现这一点而做某事,或者完全取决于消费者来处理这个问题?
关于客户端使用javascript发出请求的最后一个问题.如果他们尝试使用该服务,是否会出现"跨域请求"问题?
我必须制定一个计划来开发一个RESTful API(Python/Flask),可以被我们未来的Web应用程序(Angularjs)和移动应用程序(iOS/Android)使用.
我已经研究了三天,并且遇到了几种情况:使用HTTPS是下面方法的一种方法,以保证它更安全.但https速度较慢,这可能意味着我们需要更快,更昂贵的服务器.
如何在纯HTML5应用程序中保持私钥"安全"?
你完全正确; 在纯HTML5(JS/CSS/HTML)应用程序中,没有保护密钥.您可以通过HTTPS进行所有通信,在这种情况下您不需要密钥,因为您可以使用标准API_KEY或其他友好标识符安全地识别客户端,而无需HMAC的需要或复杂性.
换句话说,首先在Web应用程序中使用该方法甚至没有意义.老实说,我不明白这应该如何在移动设备上运行.用户下载我们的应用程序,如何将私钥从iphone发送到服务器?我转移它的那一刻,它将受到损害.
我越是研究我越是优柔寡断.
我希望能问一些以前做过这个并且可以分享经验的专业人士.非常感谢
作为休息服务的CouchDB访问似乎不安全.任何人都可以访问数据库并在文档暴露后删除/添加文档.
保护CouchDB有哪些策略?
这是我要做一个简单的GET请求的代码:
var options = {
host: 'localhost',
port: 8000,
path: '/restricted'
};
request = http.get(options, function(res){
var body = "";
res.on('data', function(data) {
body += data;
});
res.on('end', function() {
console.log(body);
})
res.on('error', function(e) {
console.log("Got error: " + e.message);
});
});
Run Code Online (Sandbox Code Playgroud)
但是该路径"/ restricted"需要简单的基本HTTP身份验证.如何添加凭据进行身份验证?我在NodeJS手册中找不到与基本http认证相关的任何内容.提前致谢.
authentication restful-authentication http basic-authentication node.js
OAuth2的规范规定授权服务器在使用隐式授权时不得发出刷新令牌.在我们的用例中,我们使用OAuth2保护RESTful API,并使用单页Javascript应用程序作为此API的客户端.由于在访问令牌过期后重定向到授权服务器非常困难,我们正在寻找更好的方法来获取新的有效令牌.我可以考虑两种不同的方法,并想知道哪一种可能更好:
使用隐藏的iframe重新请求有效的访问令牌.为此,必须包含一个参数,例如"prompt = none",它告诉OAuth提供者既不挑战认证,也不显示授权页面.如果用户已通过身份验证并已授权应用程序,则服务器将在URL#parameters中发回访问令牌.如果未满足上述条件之一,它将重定向,并出现错误,如#error = authentication%20lost.通过这种行为,我们可以使用具有隐式流的短期访问令牌.
我们可以使用一个额外的范围(例如离线)来告诉服务器分发刷新令牌.即使原始规范说隐式流不会发出刷新令牌(如果客户端仅将OAuth用于第一次授权,这是正确的),您可以自由地为您的特定应用程序定义自己的作用域.您应该考虑仅允许来自知名客户端的此范围.
这两种方法都与OpenID Connect非常相似.不幸的是,目前OpenID Connect的实现并不多.因此,第一步是扩展OAuth2服务器,直到OIC更受欢迎.
那么哪种方法应该首选?
编辑:令牌端点需要客户端身份验证,这仅适用于机密客户端,如服务器端应用程序.使用第二种方法,只有在我们的情况下,RESTful API才能使资源提供者刷新令牌并将其发送回客户端.我认为这会带来安全风险.所以我们可能只有一种有效的方法.
restful-authentication single-sign-on oauth-2.0 single-page-application
我正在开始一个新的项目,我们计划构建一个宁静的后端和一个AJAX字体结束.我正在通过专注于识别我拥有的所有资源以及各种HTTP动词将执行它们,它们的URI以及这些资源的JSON表示来解决问题.
我正在寻找最好的设计来保护后端.这是我考虑过的设计清单.我正在寻找下面未列出的替代设计,以及优点,缺点建议.该系统将使用Spring 3.0以及可能的Spring Security 3.0实现,SSL将用于系统的许多部分,但不适用于所有部分,因此一些请求可能来自SSL而一些可能不会.
选项1:使用HTTP会话
显示标准登录屏幕,创建服务器端会话并让tomcat发回jsessionid cookie并让ajax客户端在每个XHR请求中包含JSESSIONID cookie.由于以下原因,这种选择感觉就像是错误的方法.
选项2:找到一个基于Java的开源安全库来实现这一目标
除了Spring安全性之外,我还没有找到任何其他Java库,任何建议都受到高度赞赏.
选项3:尝试使用OAuth等现有协议
在我简要介绍OAuth时,它似乎是为每个站点拥有自己的用户数据库的站点进行身份验证而设计的.在这个系统中,我希望在所有后端ajax服务中共享一个全局用户数据库.
选项4:使用SAML和Shiboleth
这个选项看起来过于苛刻,而且设置和维护非常复杂.
选项5:每次请求都会发送用户名和密码
这要求用户在每次请求时都会发送用户名和密码,这意味着前端AJAX应用必须将用户名和密码存储为JavaScript对象,如果用户离开页面然后返回用户名/密码组合将会消失并且用户可能被迫再次登录.我不希望前端尝试将用户名和密码放入cookie中,因为这将构成安全性.
选项6:实施我自己的身份验证/授权协议
创建一个REST服务,用户可以向其提供用户名/密码组合,然后返回安全令牌,他们必须在每次请求时将其发送回服务.安全令牌将由服务进行数字签名,并具有到期时间.该令牌仅对大多数操作有利,高安全性操作将需要新的登录屏幕作为确认操作的端口.
这种方法的问题是我必须发明另一种安全协议,这似乎是浪费时间.
我相信我不是唯一一个反对这个问题的人,我希望堆栈溢出社区可以指出一些我还没有找到的选项和工具.
身份验证服务允许禁用用户帐户(一种软删除).
如果服务器接收到禁用用户的身份验证请求,否则该服务器将返回401或403?使用任一状态代码,我将返回一条消息,指示该帐户已被禁用.
有关快速参考,HTTP/1.1规范的相关引用(强调我的):
401未经授权
该请求需要用户身份验证.响应必须包含WWW-Authenticate头字段(第14.47节),其中包含适用于所请求资源的质询.客户端可以使用合适的Authorization头字段重复请求(第14.8节).如果请求已包含授权凭据,则401响应表示已拒绝授权这些凭据.如果401响应包含与先前响应相同的挑战,并且用户代理已经尝试过至少一次认证,则应该向用户呈现响应中给出的实体,因为该实体可能包括相关的诊断信息.HTTP访问身份验证在"HTTP身份验证:基本和摘要访问身份验证"[43]中进行了说明.
403禁止
服务器理解请求,但拒绝履行请求. 授权无效,请求不应重复.如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因.如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到).
我正在编写Java Rest Web服务并需要调用者的IP地址.我以为我曾经在cookie中看到过这个,但现在我没有看到它.是否有一致的地方获取此信息?
我看到了一个使用"OperationalContext"来获取它的例子,但这不是在java中.