我有API。其中一些仅限OAuth通过第三方应用程序进行访问。
我也有一个Web应用程序。用户可以登录并查看其私人信息。
该API也从Web应用程序中调用。我的问题是通过安全措施访问API的好方法是什么?
1. Third party applications -> OAuth
2. My own web application -> ???
我的Web应用程序使用会话ID进行身份验证。我猜想用HTTP标头传输会话ID可能是个好方法,但我没有信心。
例如...
$ curl -X PUT \
-H "X-Sample-Application-Id: "My own web application's ID" \
-H "X-Sample-Session-Token: yeoql2dvn7whpm4tbe61viscv" \
如果API收到此请求,请使用会话进行身份验证而不是oauth并标识用户...。
任何帮助将不胜感激。
谢谢,
..我发现了类似的问题
更新1
有人说JWT(Json Web令牌)很好。
https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
http://blog.mitsuruog.info/2014/08/jwtjson-web-tokenwebapicredential.html
更新2
我也许可以使用OAuth的“资源所有者密码凭据”
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/709.html
或者...“客户凭据授予”看起来要好得多。
我将对此进行详细说明,因为这是一个好问题,并且周围存在很多困惑-所以请在这里忍受。
如果您要保护的API仅由个人用于服务器端应用程序,而不是由第三方开发人员使用,我强烈建议您使用HTTP基本身份验证来保护您的API服务。
这种工作方式非常简单:
当您通过API服务进行身份验证时,请在HTTP授权标头中提供这些API凭据以标识自己。使用以下内容的样子curl
:
$ curl-用户my-api-keyid:my-api-key-secret https://api.myservice.com/blah
基本身份验证的优点在于:
现在-如果您要构建一个API服务,并希望从各种环境(而不仅仅是服务器端应用程序)对用户进行身份验证,则确实需要使用OAuth2协议。
这就是它的设计目的。
OAuth2协议可以通过多种方式对用户进行身份验证-但结果非常复杂。即使您使用的是流行的库等,将OAuth添加到您的网站也可能是一个挑战。
这是OAuth的工作方式(快速细分):
密码授予
OAuth中的密码流是您在其中交换访问令牌(通常是JWT)的用户名/密码的地方。然后,您可以使用HTTP授权标头中的访问令牌来使用API服务标识自己。
这就是大多数人在使用Angular / React和移动应用程序构建SPA时所做的事情。
客户证书授予
客户端凭据流是您为访问令牌交换API密钥(就像基本身份验证一样)的地方。然后,您可以使用HTTP授权标头中的访问令牌来使用API服务标识自己。
这就是人们使用OAuth构建服务器端应用程序时所做的事情。
内隐补助
当您登录到Facebook之类的地方时,会看到此流程。您单击一个按钮,将其重定向到其他站点以进行身份验证/接受权限,最后,您将返回带有用于识别自己身份的访问令牌的主站点。这不是API服务的理想选择。
授权码授予
此流程与隐式流程完全相同,除了您获取授权码,然后将其交换以用于标识自己的访问令牌外,该流程与隐式流程完全相同。这不是API服务的理想选择。它稍微安全些。
如果由于您的用例而打算使用OAuth,我强烈建议您签出一个身份验证提供程序,例如Stormpath。他们使很多这类东西自动化,并解决了OAuth周围的许多复杂问题。
否则,请试用基本身份验证!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句