如何高度限制具有"特定角色"的用户从"某个地方"访问应用程序?

Tim*_*man 4 java security spring-security java-ee

我需要限制特定用户的角色,以便在从特定位置访问应用程序时使用该应用程序,可以说"具有角色员工的用户只能从办公室或其分支机构访问应用程序"

  • IP检查?它是可变的
  • 如果我关注私钥/公钥怎么样?这样做的缺点是,如果我将密钥放入cookie中,他们可以读取它或清除它们的cookie.
  • 基于mac地址?它是可变的

Vad*_*dim 7

你不能相信IP和MAC地址更加无用,你唯一的朋友就是密码学.假设您的用户将使用他的凭据进行身份验证,您还需要以某种方式验证机器.这是通过在每台机器上放置不同的证书并让客户使用他的证书向服务器证明其"身份"来完成的.

如果您的客户端-服务器通信是基于SSL,您可以要求客户端身份验证-看看Java的HTTPS客户机证书认证,http://rap.ucar.edu/staff/paddy/cacerts/HTTP://文档. oracle.com/cd/E11035_01/wls100/security/SSL_client.html.

如果您的通信不是基于SSL,或者您希望在应用程序级别进行身份验证 - 您仍然可以使用该证书.从信任库加载它并通过证明您可以访问私钥来证明您的身份(通常服务器发送质询,使用公钥随机加密的东西,您通过使用私钥解密并将其发送回来进行回答.你证明你有私钥而不必显示它.

如果您不希望存储证书,则可以在每台计算机上放置不同的加密文件.客户端将能够解密它(使用硬编码密钥)并向服务器发送类似于密码的内容.

你如何保护这些证书?文件上用户的只读权限...

几个笔记 -

  1. 你真的不能相信客户端机器.一个足智多谋的敌对用户会破坏任何东西.你"敌人"拥有的资源越多,你需要付出的努力就越多.

  2. 您没有指定有关您的环境的详细信息.我确信有一些我不知道的系统级解决方案.例如,您的服务器可能连接到Active Directory并监视特定计算机上的用户登录.

  3. 有时,最佳解决方案可能不是来自软件级别.例如,如果您的服务器使用指定的端口进行通信.您可以允许\阻止防火墙\路由器\个人防火墙上的此流量 - 在比您的服务器更适合解决此问题的地方.如果您具有应用程序控制实施,则可以允许客户端本身仅在特定计算机上运行.

  4. 您还可以查找创建一些独特PC指纹的方法(主板ID,主机ID,CPU ID,Active Directory中的SID,HDD ID,MAC地址......) - 您的服务器可以存储允许的指纹列表,您的客户端将发送目前计算指纹.这仍然会回归 - 您对客户的信任程度如何?