标签: restful-authentication

如何在RESTful Web服务中实现登录?

我正在构建一个带有服务层的Web应用程序.服务层将使用RESTful设计构建.我们的想法是,未来一段时间我们可能会构建使用与Web应用程序相同的服务层的其他应用程序(iPhone,Android等).我的问题是 - 如何实现登录?我想我无法从更传统的基于动词的设计转变为基于资源的设计.如果我用SOAP构建它,我可能会有一个名为Login的方法.在REST中我应该有一个资源.我很难理解如何为登录构建我的URI.应该是这样的:

http:// myservice / {username}?p = {password}

编辑:前端Web应用程序使用传统的ASP.NET框架进行身份验证.但是,在身份验证过程中的某些时候,我需要验证提供的凭据.在传统的Web应用程序中,我会进行数据库查找.但在这种情况下,我正在调用服务而不是进行数据库查找.所以我需要服务中的一些东西来验证提供的凭据.除了验证提供的凭据之外,我可能还需要在用户成功通过身份验证之后获得有关用户的某些信息 - 例如他们的全名,他们的ID等.我希望这会使问题更加清晰.

或者我没有想到这个正确的方法?我觉得我很难正确地描述我的问题.

科瑞

rest web-services login web-applications restful-authentication

78
推荐指数
2
解决办法
9万
查看次数

AngularJS身份验证+ RESTful API

用于Auth /(重新)路由的Angular + RESTful客户端通信w/API

这已经在几个不同的问题中得到了解决,并且在一些不同的教程中,但我遇到的所有以前的资源并没有完全触及.

在坚果壳中,我需要

  • 通过POST登录http://client.foohttp://api.foo/login
  • 为提供logout路由的用户提供"登录"GUI /组件状态
  • 能够在用户注销/注销时"更新"UI. 这是最令人沮丧的
  • 保护我的路由以检查身份验证状态(如果需要)并相应地将用户重定向到登录页面

我的问题是

  • 每次我导航到不同的页面时,我都需要调用以api.foo/status确定用户是否已登录.(ATM我正在使用Express进行路由)这会导致打嗝,因为Angular会确定ng-show="user.is_authenticated"
  • 当我成功登录/注销时,我需要刷新页面(我不想这样做)以填充类似的东西{{user.first_name}},或者在注销的情况下,清空该值.
// Sample response from `/status` if successful 

{
   customer: {...},
   is_authenticated: true,
   authentication_timeout: 1376959033,
   ...
}
Run Code Online (Sandbox Code Playgroud)

我试过的

为什么我觉得我在失去理智

  • 似乎每个教程都依赖于一些数据库(许多Mongo,Couch,PHP + MySQL,无限广告)解决方案,并且没有一个完全依赖于与RESTful API的通信来持久登录状态.登录后,会发送其他POST/GET withCredentials:true,因此不是问题
  • 我找不到任何做Angular + REST + Auth的示例/教程/回购,没有后端语言.

我并不太自豪

不可否认,我是Angular的新手,如果我以荒谬的方式接近它,也不会感到惊讶; 如果有人建议替代方案,我会很激动 - 即使它是汤到坚果.

我的使用Express主要是因为我真的很喜欢- 我JadeStylus …

javascript restful-authentication node.js angularjs angular-http-interceptors

71
推荐指数
3
解决办法
7万
查看次数

JWT应该存储在localStorage还是cookie?

为了使用JWT保护REST API,根据一些材料(如本指南和此问题),JWT可以存储在localStorageCookies中.根据我的理解:

  • localStorage受XSS限制,通常不建议在其中存储任何敏感信息.
  • 使用Cookie,我们可以应用标志"httpOnly",这可以降低XSS的风险.但是,如果我们要在后端从Cookies读取JWT,那么我们将受到CSRF的约束.

因此,基于上述前提 - 最好将JWT存储在Cookies中.在每次向服务器发出请求时,将从Cookie中读取JWT并使用承载方案添加到授权标头中.然后,服务器可以验证请求标头中的JWT(而不是从cookie中读取它).

我的理解是否正确?如果是这样,上述方法是否有任何安全问题?或者实际上我们可以在第一时间使用localStorage逃脱?

security cookies restful-authentication local-storage jwt

68
推荐指数
4
解决办法
3万
查看次数

保护我的Node.js应用程序的REST API?

我可以在REST API上提供一些帮助.我正在编写一个Node.js应用程序,它使用Express,MongoDB并在客户端有Backbone.js.我花了最近两天的时间试图弄清楚这一切并没有太多运气.我已经检查过了:

我想保持我的后端和前端尽可能分开,所以我想使用精心设计的REST API会很好.我的想法是,如果我开始开发iPhone应用程序(或类似的东西),它可以使用API​​来访问数据.

但是,我希望这是安全的.用户已登录我的网络应用程序,我想确保我的API安全.我读过关于OAuth,OAuth 2.0,OpenID,Hmac,哈希等...我想避免使用外部登录(Facebook/Twitter/etc)我希望注册和登录在我的应用程序/服务器上.

......但我仍然在这里感到困惑.也许是深夜或我的大脑只是油炸,但我真的可以做一些关于这里做什么的步骤.我创建安全API的步骤是什么?

任何帮助,任何信息,任何示例,步骤或任何事情都会很棒.请帮忙!

javascript rest restful-authentication node.js backbone.js

67
推荐指数
3
解决办法
4万
查看次数

如何在JWT中使用jti声明

JWT规范提到了jti声称,据称可以用作防止重放攻击的随机数:

jti(JWT ID)声明为JWT提供唯一标识符.标识符值必须以确保将相同值偶然分配给不同数据对象的概率可忽略的方式分配; 如果应用程序使用多个发行者,则必须在不同发行者生成的值之间防止冲突.jti声明可用于防止重放JWT.jti值是区分大小写的字符串.使用此声明是可选的.

我的问题是如何实现这一目标?我是否需要存储以前使用过的jtis并在每次请求时发出新的JWT?如果是这样,这不会破坏JWT的目的吗?为什么使用JWT而不是仅仅在数据库中存储随机生成的会话ID?

我的REST API有一个mongo数据库,我并不反对添加一个redis实例.是否有比JWT更好的身份验证选项?我主要只是不想在客户端上存储密码,这会消除HTTP身份验证作为选项,但是,随着我对这个JWT内容的深入了解,我开始感觉好像自定义令牌实现或不同标准可能更好适合我的需要.是否存在基于令牌的身份验证的任何节点/快速包,它们支持令牌撤销和旋转令牌?

非常感谢任何建议.

rest restful-authentication node.js express jwt

53
推荐指数
3
解决办法
5万
查看次数

#self.included(base)在Ruby on Rails的Restful Authentication中做了什么?

我以为我们会这样做

helper_method :current_user, :logged_in?, :authorized?
Run Code Online (Sandbox Code Playgroud)

使这些控制器方法可用作视图中的辅助方法.但在Restful Authentication中lib/authenticated_system.rb,我看到:

# Inclusion hook to make #current_user and #logged_in?
# available as ActionView helper methods.
def self.included(base)
  base.send :helper_method, :current_user, :logged_in?, :authorized? if base.respond_to? :helper_method
end
Run Code Online (Sandbox Code Playgroud)

为什么这样做而不是那条单行呢?而且,我没有看到included任何地方被召唤.

ruby-on-rails restful-authentication

51
推荐指数
4
解决办法
3万
查看次数

JSON Web Signature(JWS)和JSON Web Token(JWT)有什么区别?

我一直用Java编写RESTful服务.这是我到目前为止所理解的(如果我错了,请纠正我):

令牌授权使用JSON Web令牌(JWT)完成,它包含三个部分:头,有效负载和秘密(在客户端和服务器之间共享).

我理解这个概念,并在阅读JWT时偶然发现了JSON Web Signature(JWS).

JWS也是类似于JWT的编码实体,具有头部,有效载荷和共享秘密.

问题:两个概念有什么区别,即JWT和JWS?如果它们在技术上相似,那么它们的实现有何不同?

这是我第一次使用基于令牌的身份验证,所以我可能完全误解了这个概念.

PS我在浏览本网站上的示例时了解了JWS .

java rest restful-authentication jwt http-token-authentication

47
推荐指数
2
解决办法
2万
查看次数

如果用户尝试使用不正确的用户名/密码登录,但格式正确,则返回的HTTP状态代码是什么?

此处发布了一个类似的问题:REST API服务为验证失败返回的适当HTTP状态代码是什么?

上面的线程中的答案指出"例如,如果URI应该具有ISO-8601日期,并且您发现它的格式错误或者指的是2月31日,那么您将返回HTTP 400.如果您期望它同样如此实体主体中格式良好的XML,无法解析."

但是,如果用户提交了正确格式的数据,会发生什么?我的意思是,用户提交了用户名和密码的简单字母字符串/文本(这对我的应用程序完全有效).唯一的问题是密码与用户名不匹配.在这种情况下,400将是不正确的,因为它是完全有效的语法和格式良好.

一个401是不正确的(这里建议:哪个HTTP状态代码说用户名或密码不正确?)因为用户没有尝试访问任何页面,他只是尝试登录并输入不匹配的数据.

如果你回顾我链接的第一篇文章,第二个答案表明422是正确的响应(看起来对我来说是正确的),但是,我使用的是Django Rest Framework而422并不是状态代码的一部分(a可以在此处找到属于DRF的状态代码列表:http://www.django-rest-framework.org/api-guide/status-codes/#client-error-4xx)

404也看起来不正确,因为数据被成功接受而不被拒绝.

话虽如此,应该使用的真正正确答案是什么?

validation rest restful-authentication http-status-codes django-rest-framework

45
推荐指数
4
解决办法
3万
查看次数

宁静的Web服务身份验证

我有一个Restful Web服务API,由不同的第三方使用.该API的一部分受到限制(您需要用户名/密码才能访问它).我想知道实现身份验证的最佳方法是什么?

我正在使用https,因此通信是加密的.我有两个想法:

  • 在用户开始使用(受限制)服务之前,它使用POST发送用户名/密码(因为https正在使用凭据加密).登录成功后,服务器会发回与此用户名匹配的随机一次性使用值(nonce).当发出下一个请求时,除了用户名,客户端发送先前返回的现时.服务器匹配username和nonce,并沿着请求的数据返回新的nonce.每个新请求都使用新的nonce.基本上,这是Digest访问身份验证的轻量级版本.
  • 由于此API是从第三方使用的,因此用户名/密码可用于每个(受限制的)请求.由于正在使用https,因此它们将被加密.这种方法的缺点是这不符合Restful(POST将始终使用).

我更接近于选择第一种方法(它是宁静的标准,比较容易实现,XML,JSON或HTML,可以在不改变任何使用),但我想看看你有什么看法?你推荐什么:第一种,第二种或第三种方法?

顺便说一下,我在服务器端使用Python.

authentication rest web-services restful-authentication

43
推荐指数
3
解决办法
3万
查看次数

在耙子任务期间关闭观察员的简单方法?

我在我的应用程序中使用restful_authentication.我正在使用rake任务创建一组默认用户,但每次运行任务时都会因为与我的用户模型关联的观察者而发送激活电子邮件.我在创建用户时设置激活字段,因此不需要激活.

任何人都知道在运行rake任务时绕过观察者的简单方法,以便在我保存用户时不会发送电子邮件?

谢谢.

ruby ruby-on-rails restful-authentication observer-pattern

39
推荐指数
4
解决办法
1万
查看次数