Questions tagged «restful-authentication»

有关RESTful服务身份验证的问题。


7
会话真的违反了R​​ESTfulness吗?
在RESTful API中使用会话是否真的违反了R​​ESTfulness?我已经看到许多意见朝着任何方向发展,但是我不相信会议是RESTless的。从我的观点: RESTfulness禁止身份验证(否则RESTful服务将很少使用) 通过在请求中发送身份验证令牌(通常是标头)来完成身份验证 该身份验证令牌需要以某种方式获得,并且可能会被吊销,在这种情况下,需要对其进行续订 身份验证令牌需要由服务器验证(否则将不是身份验证) 那么会话如何违反此规定? 客户端,使用cookie实现会话 Cookies只是一个额外的HTTP标头 可以随时获取并撤消会话Cookie 如果需要,会话cookie可以有无限的生存时间 会话ID(身份验证令牌)在服务器端经过验证 因此,对于客户端而言,会话cookie与任何其他基于HTTP标头的身份验证机制完全相同,只是它使用Cookie标头代替Authorization或其他专有标头。如果没有会话附加到Cookie值服务器端,那为什么会有所作为?只要服务器表现为 RESTful ,服务器端的实现就不必关心客户端。因此,Cookie本身不应使API 成为RESTless,而会话只是客户端的Cookie。 我的假设错了吗?是什么使会话cookie 无需REST?

9
RESTful Web服务-如何验证来自其他服务的请求?
我正在设计一个RESTful Web服务,该服务需要用户以及其他Web服务和应用程序访问。所有传入的请求都需要进行身份验证。所有通信均通过HTTPS进行。用户身份验证将基于身份验证令牌进行工作,该身份验证令牌是通过将用户名和密码(通过SSL连接)发布到服务提供的/ session资源中而获得的。 对于Web服务客户端,客户端服务后面没有最终用户。这些请求是由计划任务,事件或某些其他计算机操作启动的。连接服务的列表是事先已知的(显然,我想)。我应该如何验证来自其他(网络)服务的这些请求?我希望对这些服务的身份验证过程尽可能地容易实现,但是不以安全为代价。对于这种情况,标准和最佳做法是什么? 我能想到的(或已向我建议的)选项: 让客户端服务诉诸于“假”用户名和密码,并以与用户相同的方式对它们进行身份验证。我不喜欢此选项-感觉不正确。 为客户端服务分配一个永久的应用程序ID,也可以分配一个应用程序密钥。据我了解,这与使用用户名+密码相同。使用此ID和密钥,我可以对每个请求进行身份验证,也可以创建身份验证令牌来对其他请求进行身份验证。无论哪种方式,我都不喜欢此选项,因为任何可以保留应用程序ID和密钥的人都可以模拟客户端。 我可以在以前的选项中添加IP地址检查。这将使执行虚假请求变得更加困难。 客户证书。设置我自己的证书颁发机构,创建根证书,并为客户端服务创建客户端证书。不过,我想到了两个问题:a)我如何仍允许用户在没有证书的情况下进行身份验证,以及b)从客户端服务的角度来看,实现此方案有多复杂? 还有什么-那里必须有其他解决方案吗? 我的服务将在Java上运行,但是我故意遗漏了将在其上构建哪种特定框架的信息,因为我对基本原理更感兴趣,而对实现细节却不太感兴趣-我认为这是最好的解决方案无论底层框架如何,都可以实现。但是,我对这个主题没有多少经验,因此,有关实际实现的具体技巧和示例(例如有用的第三方库,文章等)也将不胜感激。

7
基本的HTTP和承载令牌认证
我目前正在开发针对开发环境受HTTP-Basic保护的REST-API。由于真正的身份验证是通过令牌完成的,因此我仍在尝试弄清楚如何发送两个授权标头。 我已经尝试过这个了: curl -i http://dev.myapp.com/api/users \ -H "Authorization: Basic Ym9zY236Ym9zY28=" \ -H "Authorization: Bearer mytoken123" 例如,我可以为我的IP禁用HTTP身份验证,但是由于我通常在具有动态IP的不同环境中工作,所以这不是一个好的解决方案。那我错过了什么吗?

9
RESTful API的令牌身份验证:令牌是否应该定期更改?
我正在使用Django和django-rest-framework构建RESTful API 。 作为身份验证机制,我们选择了“令牌身份验证”,而我已经按照Django-REST-Framework的文档进行了实现,问题是,应用程序是否应该定期更新/更改令牌,如果可以,怎么做?是需要续签令牌的移动应用程序,还是应该由网络应用程序自主执行? 最佳做法是什么? 有人在Django REST Framework方面经验丰富,可以提出技术解决方案吗? (最后一个问题的优先级较低)

6
Passport.js Passport.initialize()中间件未使用
我正在将节点与express +猫鼬一起使用,并尝试通过Restful api使用passport.js。 身份验证成功后,我不断收到此异常(我在浏览器中看到了回调URL): /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/utils.js:419 throw err; ^ Error: passport.initialize() middleware not in use at IncomingMessage.req.login.req.logIn (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/http/request.js:30:30) at Context.module.exports.delegate.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/middleware/authenticate.js:194:13) at Context.actions.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/context/http/actions.js:21:25) at verified (/Users/naorye/dev/naorye/myproj/node_modules/passport-facebook/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:133:18) at Promise.module.exports.passport.use.GitHubStrategy.clientID (/Users/naorye/dev/naorye/myproj/config/passport.js:91:24) at Promise.onResolve (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8) at Promise.EventEmitter.emit (events.js:96:17) at Promise.emit (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38) at Promise.fulfill (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20) at /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/query.js:1822:13 我已阅读,我应该把app.use(passport.initialize());和app.use(passport.session());前app.use(app.router);,这就是我所做的。这是我的express.js,用于注册中间件: var express = require('express'), mongoStore = …

2
RESTful API中的API密钥与HTTP身份验证与OAuth
我正在为我维护的应用程序之一构建RESTful API。目前,我们正在寻找将需要更多控制访问和安全性的各种功能集成到其中。在研究如何保护API时,我发现了关于使用哪种形式的几种不同观点。我已经看到一些资源说HTTP-Auth是必经之路,而其他资源则更喜欢API密钥,甚至其他(包括我在SO上找到的问题)也都由OAuth宣誓。 然后,当然,喜欢API密钥的人会说OAuth是专为代表用户访问应用程序而设计的(据我所知,例如使用您的Facebook帐户登录非Facebook网站),而不是针对直接访问他们专门注册的网站上的资源的用户(例如访问Twitter服务器的官方Twitter客户端)。但是,对于OAuth的建议似乎甚至满足最基本的身份验证需求。 那么,我的问题是-假设所有操作都通过HTTPS完成,这三者之间的实际区别是什么?什么时候应该考虑一个?

6
GraphQL有什么缺点吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 12个月前关闭。 改善这个问题 关于GraphQL的所有文章都将告诉您它的美妙之处,但是它有什么缺点或缺点?谢谢。

4
JWT应该存储在localStorage还是cookie中?[重复]
这个问题已经在这里有了答案: 在浏览器中的何处存储JWT?如何防范CSRF? (5个答案) 2个月前关闭。 为了使用JWT保护REST API,根据某些资料(如本指南和此问题),JWT可以存储在任一localStorage中或Cookies中。根据我的理解: localStorage受XSS限制,通常不建议在其中存储任何敏感信息。 用 Cookie,我们可以应用标志“ httpOnly”,以减轻XSS的风险。但是,如果我们要从后端的Cookies中读取JWT,则需要接受CSRF。 因此,基于以上前提,最好将JWT存储在Cookies中。在对服务器的每个请求中,都将使用Cookie方案从Cookie中读取JWT并将其添加到Authorization标头中。然后,服务器可以验证请求标头中的JWT(与从Cookie中读取JWT相反)。 我的理解正确吗?如果是这样,上述方法是否涉及安全性?还是实际上我们可以首先使用localStorage逃脱?

6
REST身份验证并公开API密钥
我一直在阅读REST,因此有很多关于REST的问题,以及许多其他站点和博客。尽管我从未见过这个特定的问题...由于某种原因,我无法将这个想法笼罩在心... 如果我正在构建RESTful API,并且想对其进行保护,那么我所看到的方法之一就是使用安全性令牌。当我使用其他API时,会有一个令牌和一个共享的秘密……很有意义。我不明白的是,正在通过javascript(XHR / Ajax)发出对REST服务操作的请求,这是为了防止某人通过诸如FireBug(或浏览器中的“查看源代码”)之类的简单内容来嗅探到这一点,以及复制API密钥,然后假冒使用密钥和机密的那个人?

3
如何保护RESTful Web服务?
我必须实现安全的RESTful Web服务。我已经使用Google进行了一些研究,但遇到了麻烦。 选项: TLS(HTTPS)+ HTTP基本(pc1oad1etter) HTTP摘要 两足式 OAuth 基于Cookie的方法 客户端证书(Tom Ritter和此处) 使用HMAC签署的请求且寿命有限 还有更多可能的选择要考虑吗?如果是OAuth,那么什么版本?有关系吗 从到目前为止的内容来看,带有承载令牌(没有签名)的OAuth 2.0似乎是不安全的。 我发现了另一篇有关基于REST的身份验证的非常有趣的文章。 保护您的REST API ...正确的方法

3
如果用户尝试使用不正确的用户名/密码但格式正确的登录,返回什么合适的HTTP状态代码?
这里发布了一个类似的问题:REST API服务针对验证失败返回什么合适的HTTP状态代码? 上面线程中的答案指出:“例如,如果URI应该具有ISO-8601日期,而您发现它的格式错误或引用的日期是2月31日,则您将返回HTTP 400。实体主体中格式正确的XML,并且无法解析。” 但是,如果用户提交了正确格式的数据会怎样?我的意思是,用户为用户名和密码提交了简单的字母字符串/文本(这对我的应用程序完全有效)。唯一的问题是密码与用户名不匹配。在这种情况下,400将是不正确的,因为它是完全有效的语法并且格式正确。 401不正确(如此处的建议:哪个HTTP状态代码表示用户名或密码不正确?),因为用户没有尝试访问任何页面,他只是在尝试登录和输入不匹配的数据。 如果您回头看我链接到的第一篇文章,第二个回答指出422是正确的响应(并且对我来说看起来是正确的),但是,我使用的是Django Rest Framework,而422不是状态代码的一部分(可以在以下位置找到DRF的一部分状态代码列表:http : //www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx) 404的外观也不正确,因为已成功接受数据并且未拒绝数据。 话虽如此,应该使用的真正正确答案是什么?

6
如何在RESTful Web服务中实现登录?
我正在构建带有服务层的Web应用程序。服务层将使用RESTful设计构建。这种想法是,将来我们可能会构建使用与Web应用程序相同的服务层的其他应用程序(iPhone,Android等)。我的问题是-如何实现登录?我认为我无法从较传统的基于动词的设计过渡到基于资源的设计。如果我是用SOAP构建的,则可能会有一个称为Login的方法。在REST中,我应该有一个资源。我很难理解如何为登录构建URI。应该是这样的: http:// myservice / {用户名}?p = {密码} 编辑:前端Web应用程序使用传统的ASP.NET框架进行身份验证。但是,在身份验证过程中的某个时刻,我需要验证提供的凭据。在传统的Web应用程序中,我将进行数据库查找。但是在这种情况下,我将调用服务而不是进行数据库查找。因此,我在服务中需要一些可以验证提供的凭据的东西。而且,除了验证提供的凭据外,在用户成功通过身份验证后,我可能还需要有关用户的某种信息-例如其全名,其ID等。我希望这可以使问题更清楚。 还是我没有考虑正确的方法?我觉得我很难正确地描述我的问题。 科里

4
AngularJS身份验证+ RESTful API
带有用于Auth /(re)路由的API的Angular + RESTful客户端通信 这在几个不同的问题和一些不同的教程中都有介绍,但是我所遇到的所有以前的资源并没有完全解决问题。 简而言之,我需要 通过POST从登录http://client.foo到http://api.foo/login 为用户提供提供logout路由的“已登录” GUI /组件状态 用户注销/注销时能够“更新” UI。 这是最令人沮丧的 保护我的路由以检查身份验证状态(他们是否需要),并将用户相应地重定向到登录页面 我的问题是 每次导航到另一个页面时,我都需要打电话api.foo/status确定用户是否已登录。(我正在使用Express进行路由的ATM)这会导致Angular确定类似问题ng-show="user.is_authenticated" 成功登录/注销后,我需要刷新页面(我不想这样做)以填充诸如之类的内容{{user.first_name}},或者在注销的情况下清空该值。 // Sample response from `/status` if successful { customer: {...}, is_authenticated: true, authentication_timeout: 1376959033, ... } 我尝试过的 http://witoldsz.github.io/angular-http-auth/ 1 http://www.frederiknakstad.com/authentication-in-single-page-applications-with-angular-js/ 2 https://github.com/mgonto/restangular(对于我的一生,我不知道该如何POST处理post data和不该使用query params。文档对此没有任何帮助。 为什么我觉得自己迷失了方向 似乎每个教程都依赖于某些数据库(大量的Mongo,Couch,PHP + MySQL,无限广告)解决方案,并且没有一个纯粹依靠与RESTful API的通信来保持登录状态。登录后,将发送其他POST / GETwithCredentials:true,所以这不是问题 我找不到任何使用Angular + …

4
保护我的Node.js应用程序的REST API?
我可以在REST API上提供一些帮助。我正在编写一个使用Express,MongoDB并在客户端具有Backbone.js的Node.js应用程序。我花了最后两天的时间来尝试解决所有这些问题,但运气并不好。我已经签出了: 保护REST API 使用OAuth保护我的REST API,同时仍然允许通过第三方OAuth提供程序进行身份验证(使用DotNetOpenAuth) http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ http://tesoriere.com/2011/10/10/node.js-getting-oauth-up-and-working-using-express.js-and-railway.js/ 我想使后端和前端尽可能分开,所以我认为使用精心设计的REST API会很好。我的想法是,如果我打算开发一个iPhone应用程序(或类似的东西),它可以使用API​​来访问数据。 但是,我希望这是安全的。用户已登录我的Web应用程序,并且我想确保我的API安全。我阅读了有关OAuth,OAuth 2.0,OpenID,Hmac,哈希等的信息。 ...但是我还是很困惑。也许是在深夜,或者我的大脑被炸了,但是我真的可以在这里做些什么。创建安全API的步骤是什么? 任何帮助,任何信息,任何示例,步骤或任何东西都将是不错的。请帮忙!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.