嗨已经写了这个观察和问题,关于这个问题的较早,但后来才发现,这是一个老"死"的问题.由于我非常喜欢其他人的一些见解,我将其作为一个新问题重新发布.
对于如何进行RESTful身份验证的问题,人们通常会热情地喊出"HTTP身份验证".但是,我怀疑这些人是否曾尝试使用REST 制作基于浏览器的应用程序(而不是机器到机器的Web服务).(没有违法行为 - 我只是认为他们没有遇到过并发症)
我在RESTful服务上使用HTTP身份验证发现的问题是生成可在浏览器中查看的HTML页面:
铲球这些逐点非常有见地的文章是在这里,但是这导致的很多特定浏览器的JavaScript两轮牛车,变通办法变通办法,等等的.因此,它也不是向前兼容的,因此在发布新浏览器时需要不断维护.我不认为干净清晰的设计,而且我觉得这是一项额外的工作和头痛,这样我就可以热情地向我的朋友展示我的REST徽章.
我相信cookie是解决方案.但等等,饼干是邪恶的,不是吗?不,他们不是,饼干的使用方式往往是邪恶的.Cookie本身只是一条客户端信息,就像浏览器在浏览时会跟踪的HTTP身份验证信息一样.这条客户端信息在每次请求时都会发送到服务器,就像HTTP身份验证信息一样.在概念上,唯一的区别是所述内容这块客户端状态中的可以由确定服务器作为其响应的一部分.
通过使用以下规则使会话成为RESTful资源:
现在,与HTTP身份验证的唯一区别在于,身份验证密钥由服务器生成并发送给不断发送回来的客户端,而不是客户端从输入的凭据计算它.
我认为这是一个运行良好的充分解决方案,但我必须承认,我不足以识别此方案中的潜在漏洞 - 我所知道的是,数百个非RESTful Web应用程序使用的基本相同登录协议($ _SESSION inphp,j2ee中的HttpSession等).cookie头内容仅用于寻址服务器端资源,就像接受语言可能用于访问翻译资源一样,等等.我觉得它是一样的,但也许其他人不一样?你们觉得怎么样?
我正在构建一个应用程序系统,其中包括"在云端"的服务器部分和客户端部分,例如iPhone或Android应用程序或Web浏览器.
服务器端是用PHP(LAMP)实现的,现在是一个非常简单的服务器,有许多php文件服务于每种类型的方法请求,如:getCustomers.php,addNewCustomer.php等等.此外,到目前为止,还没有使用任何安全机制,托管服务器的ISP也不提供SSL.没错,SSL不是安全选项.
现在,我想要改进我的旧系统并使其成为:
1)真正的RESTful服务,以及
2)添加安全性,用户必须经过身份验证和授权,但纯文本密码当然是不可接受的.
我的问题很简单,我如何实现并实现上述第1)和第2点?是否有任何教程,书籍章节或博客文章将这些内容组合在一起?或者我是否需要收集遍布网络的信息,然后尝试将它们尽可能地结合起来?
请问,如果你知道答案,现在我希望我不是太粗鲁,不要只是说oAuth这个或openID那个,相反我会欣赏一个清晰的解释如何或指针,例如博客文章解释这一点.毋庸置疑,我已经像疯子一样在网上搜索,但令我惊讶的是,我没有找到一个好的答案!?
问候,
史蒂夫
我想使用PHPFox开发的网站代码中的方法和资源.
基本上,我会收到请求iPhone/Android,我会收到请求并从PHPFox代码传递给相应的函数,从该函数获取响应并将其返回给设备.
为此,我使用Slim框架开发了REST API .
但我目前面临的主要障碍是访问PHPFox网站的资源(即功能和数据).
我不明白我应该如何使用"基于令牌的身份验证"来验证用户才能访问网站的资源.
如果有人可以通过一些有用的工作示例指导我正确的方向,那对我来说真的很有帮助.
注意:"基于令牌的身份验证"的建议实施应该非常安全且速度快.安全不应以任何方式受到损害.
以下是我自己尝试的代码,但我不知道它是对还是错.我的方法是正确还是错误.请有人分析一下,让我知道你对它的反馈.
要创建令牌,我使用此功能作为参数,即用户的数据
define('SECRET_KEY', "fakesecretkey");
function createToken($data)
{
/* Create a part of token using secretKey and other stuff */
$tokenGeneric = SECRET_KEY.$_SERVER["SERVER_NAME"]; // It can be 'stronger' of course
/* Encoding token */
$token = hash('sha256', $tokenGeneric.$data);
return array('token' => $token, 'userData' => $data);
}
Run Code Online (Sandbox Code Playgroud)
因此,用户可以对自己进行身份验证并接收包含令牌(genericPart +他的数据,已编码)和未编码的hisData的数组:
function auth($login, $password)
{
// we check user. For instance, it's ok, and we get his …Run Code Online (Sandbox Code Playgroud) 与一半的Web开发人员社区一起,我一直在努力真正地确定REST风格.更具体地说,我一直试图就一个纯粹的RESTful架构在Web浏览器和应用服务器之间的实际可行性形成一些看法.
作为我学习努力的一部分,我一直在研究REST的一些在线示例,特别是在这种情况下的Twitter.在他们的API文档中,他们讨论了各种"REST API方法".
除了拥有RESTful URL结构之外,我正在努力理解其中大部分实际上是RESTful.例如,考虑一个对http://twitter.com/favorites的简单GET请求.
在REST的纯实现中,我希望对该URL的相同请求(无论发起客户端如何)返回相同的响应.但是,在这种特殊情况下,我们显然会看到不同的响应,具体取决于我们当前经过身份验证的用户,这意味着我们的请求在生成响应之前连接到服务器上的某种形式的客户端状态.
希望这为我的问题提供足够的上下文 - 真的可以称之为"REST"吗?我得到的印象是,Web浏览器和应用程序服务器之间90%的所谓RESTful实现都表现出同样的不一致性,其中忽略了存储在服务器上的客户端状态限制.
在创建Web服务(RESTful)时,当会话令牌无效时,我应该使用什么状态代码?目前我公司的那个发给我一个404,没有找到,但我认为这是不正确的,因为资源存在.也许我应该使用401 Unauthorized.你怎么看?您建议我在此方案中使用什么状态代码?谢谢.
我希望将Spring Security用于Spring MVC应用程序,该应用程序将严格地作为JSON Web服务.我做了一些研究并阅读了一些文章,但还没有找到任何完整的内容.我希望应用程序完全无状态并使用基于令牌的身份验证.我不希望Spring MVC应用程序有任何形式,或使用表单进行身份验证.它应该严格地接受JSON中的请求和数据,并返回JSON响应.
将会有一个Angular JS客户端应用程序,它需要发送用户名和密码,并从应用程序中获取令牌以用于顺序请求.在某些时候,也可能有Android客户端访问此Web服务.
我假设Spring Security在内部将令牌映射到用户会话,这意味着它知道令牌XXXXXXXXXXXX是管理员用户Bob而令牌AAAAAAAAAA是标准用户Joe.但是我对Spring Security没有多少经验,所以我不知道这一切是如何结合在一起的.我仍然希望能够在控制器和服务方法上使用安全注释.
有没有办法在Spring Security中实现这一目标?
这个问题似乎是一个很好的起点,但我不确定这是否可行,因为我设想通过Spring进行RESTful身份验证.
虽然我"想"我理解它,但我需要一些清晰度.使用PURE Restful身份验证,事情确实变得有点笨拙,使用表单对应用程序的UI有很大帮助(即,获得单独的登录页面,忘记密码链接,更容易注销?等等)
现在表格出现了,有些人说"不安宁" - 对他们来说"不安宁"是什么?难道没有相应的登录资源可以这么说吗?还是它会强迫我失踪的其他东西?
注意:如果有人与他们创建会话,那就完全不同了.我更热衷于知道"为什么"他们被称为宁静?谷歌搜索"基于表单的身份验证与静态身份验证"会引发不少命中.
可以使用这些"表单"来验证和传递令牌以便应用程序存储在cookie等中,我觉得这完全是宁静的(假设加密安全等等),...
如何在Laravel 5中验证RESTful API?我正在使用Laravel 5构建RESTful API,我想将这些API用于移动应用程序.
我也看过http://laravel.com/docs/5.0/authentication 但没有得到任何相关的例子,请提供示例或适当的链接,以便在Laravel 5中验证RESTful API.
出于某种原因,当使用json或xml向我的应用程序发出请求时,我得到一个InvalidAuthenticityToken.我的理解是rails应该只为html或js请求提供真实性令牌,因此我不应该遇到这个错误.到目前为止,我发现的唯一解决方案是禁用protect_from_forgery来执行我想通过API访问的任何操作,但由于显而易见的原因,这并不理想.思考?
def create
respond_to do |format|
format.html
format.json{
render :json => Object.create(:user => @current_user, :foo => params[:foo], :bar => params[:bar])
}
format.xml{
render :xml => Object.create(:user => @current_user, :foo => params[:foo], :bar => params[:bar])
}
end
end
Run Code Online (Sandbox Code Playgroud)
每当我将请求传递给操作时,这就是我在日志中获得的内容:
Processing FooController#create to json (for 127.0.0.1 at 2009-08-07 11:52:33) [POST]
Parameters: {"foo"=>"1", "api_key"=>"44a895ca30e95a3206f961fcd56011d364dff78e", "bar"=>"202"}
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
thin (1.2.2) lib/thin/connection.rb:76:in `pre_process'
thin (1.2.2) lib/thin/connection.rb:74:in `catch'
thin (1.2.2) lib/thin/connection.rb:74:in `pre_process'
thin (1.2.2) lib/thin/connection.rb:57:in `process'
thin (1.2.2) lib/thin/connection.rb:42:in `receive_data'
eventmachine (0.12.8) lib/eventmachine.rb:242:in `run_machine'
eventmachine (0.12.8) …Run Code Online (Sandbox Code Playgroud) 我有一个很好的ASP.NET 5/MVC 6应用程序启动并运行.基本上就此而言,它只是您开始一个新项目时保持简单的正常示例应用程序.到目前为止,我可以:
现在,我想要的是为应用程序提供一个API机制来登录并获取身份验证令牌.具体来说,我正在开发两个移动应用程序进行测试,一个使用Angular/Cordova,一个使用Xamarin.
我看起来高低不一,我似乎找不到一个例子来说明如何使这项工作.到目前为止,我发现的每个示例都假设用户将通过正常的Web表单/发布周期登录,然后转到加载Angular的页面,并且身份验证令牌已经在浏览器中.
下面是MVC控制器的AccountController.cs文件中的相关代码.我最终想要的是等效功能,但来自纯API调用,允许Angular/Xamarin向其发送用户名/密码并获取身份验证令牌或失败.
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
ViewBag.ReturnUrl = returnUrl;
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
if (result.Succeeded)
{
return RedirectToLocal(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = …Run Code Online (Sandbox Code Playgroud) asp.net-mvc restful-authentication asp.net-web-api asp.net-core-mvc asp.net-core
rest ×6
php ×3
http ×2
asp.net-core ×1
asp.net-mvc ×1
forms ×1
json ×1
laravel ×1
laravel-5 ×1
phpfox ×1
spring-mvc ×1
token ×1
web-services ×1