Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
restful API三段式身份验证登录对话框的放置位置_Api_Security_Rest_Oauth - Fatal编程技术网

restful API三段式身份验证登录对话框的放置位置

restful API三段式身份验证登录对话框的放置位置,api,security,rest,oauth,Api,Security,Rest,Oauth,我正试图用三条腿的身份验证来保护restful API 目前,我在app.host.com上有一个客户端应用程序,需要多个具有不同帐户权限和数据的用户访问该应用程序,还有JSON RESTful api,该api保存app_api.host.com上的所有数据 对于三条腿的身份验证,我知道我首先需要一个属于客户端app.host.com的用户密钥和密码。。。我还了解到,服务提供商必须提供未经授权的请求令牌,该令牌被提供给客户端,然后客户端通过登录对话框重定向回服务提供商进行授权 那么登录对话框是

我正试图用三条腿的身份验证来保护restful API

目前,我在app.host.com上有一个客户端应用程序,需要多个具有不同帐户权限和数据的用户访问该应用程序,还有JSON RESTful api,该api保存app_api.host.com上的所有数据

对于三条腿的身份验证,我知道我首先需要一个属于客户端app.host.com的用户密钥和密码。。。我还了解到,服务提供商必须提供未经授权的请求令牌,该令牌被提供给客户端,然后客户端通过登录对话框重定向回服务提供商进行授权

那么登录对话框是否作为用户界面存在于app_API.host.com的API主机上?这是否违背了我单独为客户端构建一个纯JSON restful API的目的

或者我可以在客户端上构建登录对话框,然后将用户/pwd详细信息发布到API上的另一个身份验证端点,并在请求令牌被授权时提供200代码?然后,客户端又会向用户请求权限,该权限将再次发布到另一个端点,该端点随后会使用该用户的相应访问令牌进行响应

TL;DR:我是否可以在客户端上设置登录对话框,然后将数据发布到服务提供商?我读过的所有指南都建议在服务提供商上设置一个对话框,在本例中,这将破坏将api作为单独应用程序的目的。我该如何着手建造这个?是否有可用的指南?

根据您对客户端的信任程度,定义不同的流以用于不同的客户端

授权代码

第一个也是最安全的流是授权令牌流。它与传统的web应用程序一起使用,在该应用程序中,您可以相对安全地存储机密(只有具有管理员权限的人才能访问存储在配置中的客户端ID和机密)

当用户(资源所有者)想要进行身份验证时,用户代理将重定向到属于资源服务器域的授权服务器(客户端想要使用的数据,例如Facebook或Google)。授权服务器向用户显示登录UI。当用户成功进行身份验证时,它会显示同意UI,询问用户是否希望客户端应用程序访问资源。如果用户同意,用户代理将被重定向回具有授权代码的客户端应用程序。客户机应用程序现在可以使用此代码、其客户机ID和密码直接与授权服务器对话并获取访问令牌。在此流中,访问令牌永远不在用户代理手中

隐式流

在隐式流中,用户代理(这里通常是本机(移动)应用程序或JavaScript客户端)重定向到授权服务器,或打开浏览器窗口导航到授权服务器。当用户成功进行身份验证并向客户端应用程序授予权限时,访问令牌本身将返回给客户端。因此,用户代理永远看不到用户输入的用户名和密码(这发生在由资源服务器控制的HTML页面上),但可以控制访问令牌

资源所有者密码凭据流

在这里,用户代理是完全可信的,并要求用户输入用户名和密码。然后,它与授权服务器通信以获取访问令牌。即使用户代理知道用户的凭据,它也只使用一次来获取访问令牌。它不需要将它们随每个请求一起发送到资源服务器


因此,为了回答您的问题,如果您认为您的用户会足够信任您的应用程序并向您提供他们的凭据,您可以在应用程序中构建登录对话框。否则,您可能应该使用其他流之一。您可以阅读有关OAuth 2和的更多信息。

感谢您的回复。在客户端本身上承载登录对话框/接口,然后使用用户名/pwd(使用TSL)向auth服务器发出post请求,然后再将该请求重定向回具有适当详细信息的客户端,这有意义吗?或者这违反了“OAuth”准则(对话框应该与客户机分开?)?我之所以这样问,是因为我希望将应用程序本身保持为纯restful API。如果您的用户信任您的客户端,您可以使用资源所有者密码流,您的用户代理(例如移动应用程序)将在本地UI中向用户询问凭据。选择哪个流取决于用户对客户端的信任程度。来自应用商店的本机应用可能是恶性的。该流不会影响API的RESTfull。服务器上不需要存储任何状态,身份验证通常在与API本身交互之前发生(当您只发送访问令牌时)。