标签: restful-authentication

RESTful身份验证

RESTful身份验证的含义是什么?它是如何工作的?我无法在Google上找到一个很好的概述.我唯一的理解是你在URL中传递会话密钥(remeberal),但这可能是非常错误的.

authentication rest restful-authentication rest-security

726
推荐指数
11
解决办法
39万
查看次数

会话真的违反了R​​ESTfulness吗?

在RESTful API中使用会话是否真的违反了R​​ESTfulness?我看到很多意见朝着两个方向发展,但我不相信会话是无REST的.在我看来,我的观点是:

  • RESTfulness不禁止身份验证(否则在RESTful服务中几乎没有用)
  • 通过在请求中发送身份验证令牌(通常是标头)来完成身份验证
  • 此身份验证令牌需要以某种方式获取并可能被撤销,在这种情况下需要续订
  • 验证令牌需要由服务器验证(否则它不会是身份验证)

会话如何违反这一点?

  • 客户端,会话使用cookie实现
  • cookies只是一个额外的HTTP标头
  • 可以随时获取和撤销会话cookie
  • 如果需要,会话cookie可以有无限的生命周期
  • 会话ID(身份验证令牌)在服务器端验证

因此,对于客户端,会话cookie与任何其他基于HTTP头的身份验证机制完全相同,除了它使用Cookie头而不是Authorization其他专有头.如果cookie值服务器端没有附加会话,为什么会产生影响呢?只要服务器表现为 RESTful ,服务器端实现就不需要关注客户端.因此,cookie本身不应该使API无REST,而会话只是客户端的cookie.

我的假设是错的吗?什么使会话cookie RESTless

cookies rest session restful-authentication

472
推荐指数
4
解决办法
12万
查看次数

RESTful Web服务 - 如何验证来自其他服务的请求?

我正在设计一个RESTful Web服务,需要用户访问,还需要其他Web服务和应用程序访问.所有传入的请求都需要进行身份验证.所有通信都通过HTTPS进行.用户身份验证将基于身份验证令牌工作,通过将用户名和密码(通过SSL连接)POST 到服务提供的/ session资源获取.

对于Web服务客户端,客户端服务后面没有最终用户.请求由计划的任务,事件或一些其他计算机操作启动.连接服务列表事先已知(显然,我猜).我该如何验证来自其他(网络)服务的这些请求?我希望身份验证过程尽可能简单地实现这些服务,但不以安全为代价.对于这样的场景,标准和最佳实践是什么?

我能想到的(或者有人向我建议的)选项:

  1. 让客户服务使用"假的"用户名和密码,并以与用户相同的方式对其进行身份验证.我不喜欢这个选项 - 它感觉不对劲.

  2. 为客户端服务分配永久应用程序ID,也可能是应用程序密钥.据我所知,这与用户名+密码相同.使用此ID和密钥,我可以验证每个请求,或创建身份验证令牌以验证进一步的请求.无论哪种方式,我都不喜欢这个选项,因为任何能够获得应用程序ID和密钥的人都可以冒充客户端.

  3. 我可以在以前的选项中添加IP地址检查.这将使执行虚假请求变得更加困难.

  4. 客户证书.设置我自己的证书颁发机构,创建根证书,并为客户端服务创建客户端证书.但是,有几个问题浮现在脑海中:a)如何在没有证书的情况下允许用户进行身份验证,以及b)从客户端服务的角度来看,这种情况有多复杂?

  5. 还有别的 - 那里必须有其他解决方案吗?

我的服务将运行在Java上,但我故意遗漏了有关它将构建的具体框架的信息,因为我对基本原则更感兴趣,而不是对实现细节更感兴趣 - 我认为最好的解决方案是无论底层框架如何,都可以实现.但是,我对这个主题有点缺乏经验,所以对实际实现的具体提示和示例(例如有用的第三方库,文章等)也将非常感激.

authentication rest web-services restful-authentication client-certificates

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

基本HTTP和承载令牌认证

我目前正在开发一个REST-API,它为开发环境提供HTTP-Basic保护.由于真正的身份验证是通过令牌完成的,我仍然试图找出,如何发送两个授权头.

我试过这个:

curl -i http://dev.myapp.com/api/users \
  -H "Authorization: Basic Ym9zY236Ym9zY28=" \
  -H "Authorization: Bearer mytoken123"
Run Code Online (Sandbox Code Playgroud)

我可以为我的IP禁用HTTP身份验证,但由于我通常在具有动态IP的不同环境中工作,这不是一个好的解决方案.我错过了什么吗?

rest curl restful-authentication basic-authentication access-token

105
推荐指数
4
解决办法
29万
查看次数

RESTful API的令牌认证:令牌是否应定期更改?

我正在使用Django和django-rest-framework构建RESTful API .

作为认证机制,我们选择了"令牌认证",并且我已经在Django-REST-Framework的文档之后实现了它,问题是,应用程序是否应该定期更新/更改令牌,如果是,如何?应该是需要续订令牌的移动应用程序还是Web应用程序应该自动执行此操作?

什么是最佳做法?

这里的任何人都有使用Django REST Framework的经验,可以提出技术解决方案吗?

(最后一个问题的优先级较低)

django rest restful-authentication django-rest-framework

103
推荐指数
5
解决办法
4万
查看次数

RESTful API中的API密钥与HTTP身份验证与OAuth

我正在为我维护的其中一个应用程序构建RESTful API.我们目前正在寻求构建各种需要更多受控访问和安全性的东西.在研究如何保护API时,我发现了一些关于使用什么形式的不同意见.我已经看到一些资源说HTTP-Auth是要走的路,而其他人更喜欢API密钥,甚至其他人(包括我在SO上找到的问题)都发誓OAuth.

然后,当然,那些喜欢API键的人说,OAuth是为代表用户访问的应用程序而设计的(据我所知,例如使用你的Facebook帐户登录非Facebook网站),而不是用户直接访问他们专门注册的网站上的资源(例如访问Twitter服务器的官方Twitter客户端).但是,OAuth的建议似乎甚至是最基本的身份验证需求.

那么我的问题是 - 假设它都是通过HTTPS完成的,三者之间有哪些实际差异?什么时候应该考虑其他人?

security api restful-authentication

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

passport.js passport.initialize()中间件未使用

我正在使用带有express + mongoose的节点并尝试将passport.js与restful api一起使用.
身份验证成功后我一直收到此异常(我在浏览器上看到了回调网址):

/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
Run Code Online (Sandbox Code Playgroud)

我已经读过,我应该放在app.use(passport.initialize());app.use(passport.session());之前app.use(app.router);,这就是我所做的.这是我注册中间件的express.js:

var express = require('express'),
    mongoStore = require('connect-mongo')(express),
    flash = require('connect-flash'),
    helpers = require('view-helpers');

module.exports = function (app, config, passport) {
    app.set('showStackError', true);
    // should be placed before express.static
    app.use(express.compress({ …
Run Code Online (Sandbox Code Playgroud)

restful-authentication mongoose node.js express passport.js

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

REST身份验证和公开API密钥

我一直在阅读REST,关于它,以及很多其他网站和博客都有很多问题.虽然我从来没有见过这个具体的问题...出于某种原因,我无法围绕这个概念进行思考......

如果我正在构建RESTful API,并且我想要保护它,我看到的方法之一是使用安全令牌.当我使用其他API时,有一个令牌和共享秘密......这是有道理的.我不明白的是,对休息服务操作的请求是通过javascript(XHR/Ajax)进行的,这是为了防止有人用FireBug(或浏览器中的"查看源代码")这样简单的东西来嗅出它复制API密钥,然后使用密钥和密钥冒充该人?

restful-authentication

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

如何保护RESTful Web服务?

我必须实现安全的RESTful Web服务.我已经使用谷歌进行了一些研究但是我被卡住了.

选项:

TLS(HTTPS)+

是否有更多可能的选择?如果OAuth那么什么版本?它甚至重要吗?从我到目前为止所读到的OAuth 2.0与持有令牌(没有签名)似乎是不安全的.

我发现了另一篇关于基于REST的身份验证的非常有趣的文章.

保护您的REST API ......正确的方法

security rest web-services restful-authentication oauth

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

GraphQL有什么缺点吗?

关于GraphQL的所有文章都会告诉你它有多棒,但它有什么缺点或缺点吗?谢谢.

rest restful-authentication graphql

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