我们的应用程序为每个用户提供不同的角色,只允许某些用户查询数据。我们必须验证每个请求的用户ID和密码。
我有一个简单的REST get,用户传递员工ID,我们返回员工数据。传递用户ID和密码的最佳方法是什么?在URL(即@PathParam)中使用用户ID和密码是个坏主意吗?
现在我有如下所示,这将返回用户u1
的emp id 111的员工数据的https:../ MyRestWebService /服务/ getEmp / U1 / encpassword / 111
只有https端口将在防火墙中打开,即所有请求始终通过https,密码始终是编码字符串(我们发布如何编码)
感谢
答案 0 :(得分:0)
是的,在URI中输入用户名和密码是个坏主意。对于初学者来说,这意味着您不能在不暴露用户名和密码的情况下共享URI。您是否有一些令人信服的理由不使用HTTP基本身份验证?这看起来就像是为它设计的确切情况。
GET https://.../employees/111
是一个更正确的URI。
答案 1 :(得分:0)
这是否是一个好主意总是取决于你如何使用它。传递密码本身可能至少会引起人们的注意,这可能是一个严重的问题。
通常,这两种方法在发出进一步调用之前需要登录,这模仿人类用户将使用系统但需要逻辑来处理客户端登录和注销。第二种是使用API令牌,这可能不太安全,但对自动化客户端来说更方便。请注意,没有根本原因你不能同时做到这两点。
看看github如何处理API身份验证;他们实际上都做到了。您可以执行OpenAuth身份验证以创建经过身份验证的会话,该会话采用后续请求中使用的临时访问令牌的形式。您还可以创建永久访问令牌并将其与帐户关联。
您还可以使用框架或内置的会话支持(取决于您的服务器堆栈)来隐式跟踪经过身份验证的会话。