RESTful身份验证的含义是什么?它是如何工作的?我无法在Google上找到一个很好的概述.我唯一的理解是你在URL中传递会话密钥(remeberal),但这可能是非常错误的.
在RESTful API中使用会话是否真的违反了RESTfulness?我看到很多意见朝着两个方向发展,但我不相信会话是无REST的.在我看来,我的观点是:
会话如何违反这一点?
因此,对于客户端,会话cookie与任何其他基于HTTP头的身份验证机制完全相同,除了它使用Cookie头而不是Authorization其他专有头.如果cookie值服务器端没有附加会话,为什么会产生影响呢?只要服务器表现为 RESTful ,服务器端实现就不需要关注客户端.因此,cookie本身不应该使API无REST,而会话只是客户端的cookie.
我的假设是错的吗?什么使会话cookie RESTless?
我正在设计一个RESTful Web服务,需要用户访问,还需要其他Web服务和应用程序访问.所有传入的请求都需要进行身份验证.所有通信都通过HTTPS进行.用户身份验证将基于身份验证令牌工作,通过将用户名和密码(通过SSL连接)POST 到服务提供的/ session资源获取.
对于Web服务客户端,客户端服务后面没有最终用户.请求由计划的任务,事件或一些其他计算机操作启动.连接服务列表事先已知(显然,我猜).我该如何验证来自其他(网络)服务的这些请求?我希望身份验证过程尽可能简单地实现这些服务,但不以安全为代价.对于这样的场景,标准和最佳实践是什么?
我能想到的(或者有人向我建议的)选项:
让客户服务使用"假的"用户名和密码,并以与用户相同的方式对其进行身份验证.我不喜欢这个选项 - 它感觉不对劲.
为客户端服务分配永久应用程序ID,也可能是应用程序密钥.据我所知,这与用户名+密码相同.使用此ID和密钥,我可以验证每个请求,或创建身份验证令牌以验证进一步的请求.无论哪种方式,我都不喜欢这个选项,因为任何能够获得应用程序ID和密钥的人都可以冒充客户端.
我可以在以前的选项中添加IP地址检查.这将使执行虚假请求变得更加困难.
客户证书.设置我自己的证书颁发机构,创建根证书,并为客户端服务创建客户端证书.但是,有几个问题浮现在脑海中:a)如何在没有证书的情况下允许用户进行身份验证,以及b)从客户端服务的角度来看,这种情况有多复杂?
还有别的 - 那里必须有其他解决方案吗?
我的服务将运行在Java上,但我故意遗漏了有关它将构建的具体框架的信息,因为我对基本原则更感兴趣,而不是对实现细节更感兴趣 - 我认为最好的解决方案是无论底层框架如何,都可以实现.但是,我对这个主题有点缺乏经验,所以对实际实现的具体提示和示例(例如有用的第三方库,文章等)也将非常感激.
authentication rest web-services restful-authentication client-certificates
我目前正在开发一个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
我正在使用Django和django-rest-framework构建RESTful API .
作为认证机制,我们选择了"令牌认证",并且我已经在Django-REST-Framework的文档之后实现了它,问题是,应用程序是否应该定期更新/更改令牌,如果是,如何?应该是需要续订令牌的移动应用程序还是Web应用程序应该自动执行此操作?
什么是最佳做法?
这里的任何人都有使用Django REST Framework的经验,可以提出技术解决方案吗?
(最后一个问题的优先级较低)
我正在为我维护的其中一个应用程序构建RESTful API.我们目前正在寻求构建各种需要更多受控访问和安全性的东西.在研究如何保护API时,我发现了一些关于使用什么形式的不同意见.我已经看到一些资源说HTTP-Auth是要走的路,而其他人更喜欢API密钥,甚至其他人(包括我在SO上找到的问题)都发誓OAuth.
然后,当然,那些喜欢API键的人说,OAuth是为代表用户访问的应用程序而设计的(据我所知,例如使用你的Facebook帐户登录非Facebook网站),而不是用户直接访问他们专门注册的网站上的资源(例如访问Twitter服务器的官方Twitter客户端).但是,OAuth的建议似乎甚至是最基本的身份验证需求.
那么我的问题是 - 假设它都是通过HTTPS完成的,三者之间有哪些实际差异?什么时候应该考虑其他人?
我正在使用带有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) 我一直在阅读REST,关于它,以及很多其他网站和博客都有很多问题.虽然我从来没有见过这个具体的问题...出于某种原因,我无法围绕这个概念进行思考......
如果我正在构建RESTful API,并且我想要保护它,我看到的方法之一是使用安全令牌.当我使用其他API时,有一个令牌和共享秘密......这是有道理的.我不明白的是,对休息服务操作的请求是通过javascript(XHR/Ajax)进行的,这是为了防止有人用FireBug(或浏览器中的"查看源代码")这样简单的东西来嗅出它复制API密钥,然后使用密钥和密钥冒充该人?
我必须实现安全的RESTful Web服务.我已经使用谷歌进行了一些研究但是我被卡住了.
选项:
TLS(HTTPS)+
是否有更多可能的选择?如果OAuth那么什么版本?它甚至重要吗?从我到目前为止所读到的OAuth 2.0与持有令牌(没有签名)似乎是不安全的.
我发现了另一篇关于基于REST的身份验证的非常有趣的文章.
关于GraphQL的所有文章都会告诉你它有多棒,但它有什么缺点或缺点吗?谢谢.
rest ×7
security ×2
web-services ×2
access-token ×1
api ×1
cookies ×1
curl ×1
django ×1
express ×1
graphql ×1
mongoose ×1
node.js ×1
oauth ×1
passport.js ×1
session ×1