我在SO上发现了很多关于这个主题的问题,但是找不到任何回答这个问题的问题:
我应该使用用户名和密码,还是使用API密钥验证用户?每种方法的优缺点是什么?
我问这个是因为在我的API中,有几种方法我想锁定并验证用户是否可以访问某些文档或操作.我有点不愿意通过让用户使用他们的用户名和密码发送HTTP AUTH标头进行身份验证,因为它感觉不安全并且对用户来说更麻烦.另一方面,如果我使用API密钥,那么用户创建密码的重点是什么?因为他们将不再使用它来访问API的功能.
UPDATE
如果其他读者对我最终使用的内容感到好奇,我决定复制亚马逊的验证方式(这里有很好的解释:https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf)
我正在检查salesforce开发人员站点中的示例.
在该示例中,当我们单击链接时,它将被重定向到salesforce登录页面.如果登录成功,则发出访问令牌.
我不希望我的应用程序重定向到salesforce登录页面.在现有示例中,环境变量设置为,
"https://login.salesforce.com"
我该怎么做才能避免重定向到salesforce登录页面.
我正在寻找一个解决方案 - 针对SAML IDP验证移动应用用户,并获得一些基本查询(我是SAML,OAuth的新手:))在这种情况下,流程可能就像移动用户将通过以下身份验证IDP,IDP生成的SAML响应被发送到服务提供商(通过移动浏览器 - Webview).然后,服务提供商将创建一个令牌,移动应用程序将使用该令牌进行后续呼叫.这种理解是否正确?
另外,移动用户如何在IDP进行身份验证,我的意思是相应的IDP应该支持移动应用吗?登录时会在手机上看到IDP的登录界面?
在我的应用程序中,目前,移动(Rest API)用户根据其应用程序在数据库中的凭据进行身份验证.但现在桌面应用程序正在整合SAML进行身份验证.因此,移动用户需要针对SAML IDP进行身份验证.
提前致谢!
我已经阅读了很多关于预检和CORS的答案,所以请不要发布引用我应该阅读的内容的链接.许多答案来自服务器视角,但在这种情况下我是客户端.我是否设置了原始标题?我的假设是这是一个简单的请求,对吗?
req.open("POST", url, true);
req.setRequestHeader( 'Content-Type', 'application/blahblah' );
req.setRequestHeader( 'Accept', 'application/blahblah' );
req.setRequestHeader("Authorization", "Basic " + btoa(user + ":" + pass));
req.send();
Run Code Online (Sandbox Code Playgroud)
但它仍然无法正常工作,我的错误:
对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'null'访问.响应的HTTP状态代码为500.
我希望在我的用户的帮助下对某些受某些规则保护的数据进行休息调用,因此我需要将令牌发送给我的请求.取决于firebase文档的哪个版本,有不同的方式:旧的和弃用的方式(https://www.firebase.com/docs/rest/api/):
'https://samplechat.firebaseio-demo.com/users/jack/name.json?auth=<TOKEN>'
Run Code Online (Sandbox Code Playgroud)
新方式和我引用文档(https://firebase.google.com/docs/reference/rest/database/user-auth#section-get):
使用访问令牌Database REST API将接受查询字符串或标头上的access_token = Authenticate:Bearer以使用服务帐户验证请求.
'https://samplechat.firebaseio-demo.com/users/jack/name.json?access_token=<TOKEN>'
Run Code Online (Sandbox Code Playgroud)
即使我在设置时使用了新的firebase控制台,即使我使用的令牌是使用新的Firebase sdk生成的,新的方式也不适用于我.有人知道为什么只有弃用的方式有效吗?我有兴趣将令牌放在我的请求的标题中,但不能这样做.
rest restful-authentication firebase firebase-authentication firebase-realtime-database
对于RESTful Web服务,我们说服务器不应该存储任何状态.现在,对于每个请求,"用户"必须经过身份验证,并且必须拥有他/她希望执行的操作的授权.
现在,每个请求都将包含该用户的授权数据.这是我的困惑:
假设主页上有登录名和密码字段.用户输入用户名/密码,该用户名/密码被发送回服务器,用户验证然后返回"某个令牌".现在,每个请求都会将此令牌发送到服务器.问题(S):
我可能误解了RESTful身份验证/授权的概念.但实际情况是,对于每个http请求,"服务"需要访问数据库以验证凭据吗?有没有什么东西可以简化这个过程,仍然坚持宁静的原则?我可以想到有一个存储细节的缓存,并且在服务器重启的情况下,它只是访问数据库.这只是一个可能使系统复杂化的性能优势(可能值得,不知道).这是唯一的解决方案吗?
因此,从REST的理论/概念角度(不是必要的实现)如何处理这个问题(如果它是一个问题)?您的专业经验如何处理这个问题以及Restful是如何处理的?
我们正在研究Restlet + J2EE + MySQL Restful Web服务,我弹出这个问题,但没有令人满意的答案(谷歌,Stackoverflow等)我知道HTTP的基本和摘要授权,但我不熟悉根据上述说明,存储/检索的内部结构.
java performance web-services restful-authentication restlet
当用户帐户信息(用户ID,密码,角色等)将在我们自己的后端维护以及何时不与其他站点共享资源时,OAuth是否合理?或者分享使用OAuth的全部意义?
背景:
我正在开发企业SaaS产品,我们正在创建一个RESTful API供我们的前端应用程序使用.API的消费者将是我们开发的浏览器和本机智能手机(iOS和Android)应用程序.由于我们将支持多种客户端类型,因此创建我们所有客户端应用程序都可以使用的RESTful API是有意义的.
当然,我们需要保护这个RESTful API.我们正在考虑使用HTTPS/Basic Auth进行身份验证,但我们知道这种方法存在一些众所周知的缺点.
一些快速研究表明OAuth是强烈推荐的.但我发现OAuth的大部分内容都是在授权网站代表用户共享信息的背景下.
任何信息,如果最受欢迎.
我和其中一位同事一直在讨论这种方法
这是一个示例场景:
我正在尝试获取CustomerID为1234的所有订单.
考虑以下端点:
/客户/订单
使用GET请求,使用以下标头:
授权:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ ==
使用Authorization标头,我们的身份验证机制为ID为1234的客户识别此请求,我们的服务返回所需的订单.
他试图说服我这是正确的,因为登录客户,只会请求他们的订单(在这种情况下,属于客户1234的订单) - 所以不需要在URL中传递ID.但是......对我来说,这不是RESTful(我可能错了)
在我看来,它应该是这样的:
/客户/ 1234 /订单
用标题(作为例子)
授权:基本QWxhZGRpbjpvcGVuIHNlc2FtZQ ==
使用Authorization标头,我们验证用户是否有权检索这些订单......如果是,则返回它们,否则返回401
我的问题是,哪种方法首选?
我当然可以看到第一种方式带来的好处,但是为了保持我们的api RESTful,我心里说第二种方式......
rest restful-authentication restful-url restful-architecture asp.net-web-api
为什么Django REST Framework实现了与内置Django机制不同的身份验证机制?
也就是说,可以配置两个设置类:
settings.AUTHENTICATION_BACKENDS 它处理Django级别的身份验证,以及settings.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] 在REST-Framework级别进行身份验证我遇到的问题是我有一个中间件层来检查用户是否登录.
使用通过会话进行身份验证的Web客户端时,这很好用.但是,从移动设备或运行测试套件(即使用HTTP标头和令牌进行身份验证)时,中间件会将用户检测为AnonymousUser,但是当我们到达REST Framework层时,Authorization会读取HTTP 标头,并且用户是登录.
为什么这些都不会在中间件之前发生?此外,为什么REST Framework的身份验证方法不依赖于Django身份验证后端?
authentication django restful-authentication django-rest-framework
我目前的工作是使用OAuth2来使用RESTful API.目前我研究了如何获取访问令牌,并且在我使用chrome扩展Rest Console时工作正常,但是当我尝试从我的应用程序执行此操作时,我总是收到错误,即我发送了无效的OAuth请求.您可以在下面看到我尝试使用API的三种方法,但没有成功.页面总是返回错误500.如果我错过了一些关键的东西,任何帮助将不胜感激.
var auth = "Bearer " + item.access_token;
/* First Attempt */
var client = new RestClient("http://<link>");
var request = new RestRequest("sample", Method.GET);
request.AddHeader("Authorization", auth);
request.AddHeader("Content-Type", "application/json;charset=UTF-8");
request.AddHeader("Pragma", "no-cache");
request.AddHeader("User-Agent", "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36");
request.AddHeader("Accept", "application/json");
request.RequestFormat = DataFormat.Json;
var response = client.Execute(request);
var content = response.Content;
/* Second Attempt */
string sURL = "http://<link>/sample";
string result = "";
using (WebClient client = new WebClient())
{
client.Headers["Authorization"] = auth;
client.Headers["Content-Type"] …Run Code Online (Sandbox Code Playgroud) rest ×6
oauth ×3
java ×2
oauth-2.0 ×2
api ×1
c# ×1
django ×1
firebase ×1
javascript ×1
performance ×1
restful-url ×1
restlet ×1
salesforce ×1
saml-2.0 ×1
web-services ×1