Questions tagged «authentication»

认证是一个实体向另一实体证明其身份的行为。常见的示例涉及公钥加密。例如,证明银行网站实际上属于您认为的银行。

1
jwt中“ aud”和“ iss”之间的区别
我想实现一个更强大的身份验证服务,这jwt是我要做的事情的很大一部分,而且我了解如何编写代码,但是在理解保留iss与aud声明之间的区别时遇到了一些麻烦。我知道,一个定义了颁发令牌的服务器,而一个则引用了打算使用的应用程序。但是我的理解是,我的听众和发行人是同一件事,myserver.com就是发行令牌,以便以后的人们myserver.com可以得到授权和认证。我想我看不到两种说法之间的区别,尽管我知道有一种。 有一篇很好的文章写在msdn 关于所有保留的索赔,这是我最困惑的地方,因为他们的发行人和受众完全不同。

2
在源代码中隐藏API密钥的最佳方法
我需要一些有关如何保护应用程序(尤其是ac#.NET应用程序)中的私有API密钥的想法。 首先,我了解到从理论上讲不可能在源代码中隐藏任何内容,因此我想出了另一个想法,但是我不确定它的合理性。无论如何,是否有可能以某种方式与Web服务器通信以验证私钥,然后再与应用程序对话以确认它是合法的握手? 我有两个密钥可以使用:一个公共密钥(顾名思义,不必像对待私有密钥一样小心对待),以及一个私有密钥,它需要与他人保持安全。 我将如何做到这一点的任何想法将不胜感激。
12 c#  api  authentication 

4
如果我考虑到用户的故意错误行为,我是否会过度设计?
如果我添加了针对用户的故意不当行为的保护措施(轻描淡写),如果用户可能遭受的伤害与我的代码无关,是否过度设计? 为了澄清,我将公开一个简单的JSON RESTful服务,如下所示: GET /items - to retrieve list of user's items PUT /items/id - to modify an item POST /items - to add a new item 该服务本身并不旨在通过浏览器使用,而只能从由用户控制的第三方应用程序(例如电话应用程序,桌面应用程序等)中使用。同样,服务本身应该是无状态的(即无会话的)。 身份验证通过SSL上的基本身份验证完成。 我说的是这样一种可能的“有害”行为: 用户在浏览器中输入GET网址(没有理由,但是...)。浏览器要求基本身份验证,对其进行处理,并为当前浏览会话存储身份验证。用户无需关闭浏览器即可访问恶意网站,该网站具有恶意CSRF / XSRF javascript,可对我们的服务进行POST。 上述情况极不可能发生,并且我知道从业务角度来看,我不必担心太多。但是为了改善这种情况,您是否认为如果JSON POST数据中也需要用户名/密码,这会有所帮助吗? 还是应该完全放弃基本身份验证,放弃GET,只使用其中包含授权信息的POST / PUT?由于通过GET检索信息也是敏感的。 另一方面,使用自定义标头是否考虑过纯REST实现?我可以删除基本身份验证,并使用自定义标头。这样,至少可以避免来自浏览器的CSRF攻击,并且使用该服务的应用程序将在自定义heather中设置用户名/密码。这种方法的缺点是,现在无法从浏览器使用该服务。

5
Web应用程序身份验证/安全性的最佳做法(任何平台)
今天,我的经理向我提出了一个问题,问我关于什么是可以接受的Web表单应用程序身份验证设计的想法,特别是对于许多流行的浏览器的性质而言,“典型用户名”密码登录字段“记住密码” 。 我在想出一个我认为可以接受的答案时遇到了麻烦。鉴于Sony令人尴尬的安全漏洞,即使存储在人身上的数据敏感度较低,我也确实要小心。我们不存储社会安全号码,甚至不存储地址,但是我们存储电话号码,电子邮件地址和访客的照片。 他担心用户可以简单地在公共终端上记住密码,然后有人可以简单地跳到该终端上并以未经授权的方式开始查看或修改数据。但是,我相当确定,至少在Windows工作站上,浏览器不会跨Windows用户帐户“记住密码”。 除此之外,我正在服务器端实现一种单向密码加密(将加密的密码存储在数据库中,在服务器上加密用户提供的密码,与数据库中的加密字符串进行比较)。目前尚无合并SSL加密的计划,但这仍然是一个选择。 这种方法是否存在主要的安全缺陷?您有更好的建议吗?

2
Cookie vs.会话vs jwt
我正在阅读Web应用程序中的身份验证/授权。有人可以确认/纠正我目前的知识吗? Cookies:在其早期版本中,具有唯一客户端的文本文件会标识与该客户端有关的所有其他信息(例如角色) 会话:只有唯一的客户端ID在文件中发送(也称为Cookie),其他所有内容都存储在服务器上 JWT:所有内容都存储在令牌中(也可以存储在文本文件中,也称为Cookie) 感谢您的任何反馈!

7
通过HTTPS进行身份验证会降低我的应用程序速度吗?
我正在构建一个Web应用程序和RESTful Web服务。 我一直在阅读有关如何验证对Web服务的请求的最佳方法的各种文章。 对我而言,最好的选择似乎是使用HTTP基本身份验证。我阅读的几乎每篇文章都说,身份验证应该通过SSL或等效协议进行加密。 我不太确定这涉及什么。这是否意味着我的整个Web服务必须位于安全的服务器上?这会减慢速度吗?

2
设计REST API的身份验证
我正在为将要生产和使用的REST服务设计API。我花了几天的时间试图弄清楚如何很好地处理身份验证,并认为我终于想出了一些办法。 我基于有关应用程序堆栈的以下事实提出此建议: 客户端和服务器位于.NET4中(客户端配置文件中的客户端部分) 服务器使用WCF REST公开 我真的不想在应用程序的内存中保留用户名和密码 从3开始,我想使用一种令牌身份验证的方式,以便在服务器验证了凭据之后,客户端将获得令牌以供整个应用程序的其余部分使用(这将使我能够做其他事情,例如使用户超时,并能够在网络版本和桌面版本之间无缝移动用户等)。在弄清楚如何使呼叫重播和防篡改之后,我提出了以下建议: 在客户端尝试进行身份验证之前,它会使用ECDiffieHellmanCng该类生成Diffie-Hellman密钥对。 它通过电线发送密钥对的公共部分以及用户名和密码(当然是通过HTTPS)。 服务器验证用户名/密码组合,如果成功,则执行以下操作: 创建一个唯一的会话令牌 生成自己的DH密钥对,并根据客户端提供的公共密钥计算共享密钥 记录其数据库中的会话令牌,共享机密,用户和“最后操作”时间(用于滚动到期窗口) 返回会话令牌,其公共DH密钥和身份验证成功消息 客户端从响应中获取DH密钥,计算共享密钥,并将令牌和密钥存储在内存中。 从那时起,会话令牌/秘密组合的工作方式与大多数其他REST API一样,对请求进行了指纹识别和时间戳记,然后生成了某种HMAC。每当客户端对服务器执行操作时,客户端都会检查令牌/秘密对,并允许该操作有效且未过期,并更新会话中的最后一个操作记录。 我看不到任何明显的缺陷,并且为此可能过度设计了,但是我需要在某个时候学习如何做到这一点。HMAC可以防止重放攻击,DH协商可以防止MITM攻击(我想不到在HMAC / DH之间可以进行有效的攻击)。 任何人都可以在此戳戳?

2
在REST API中自定义使用Authorization标头
我正在构建一个REST api,其中使用客户端证书对客户端进行身份验证。在这种情况下,客户端不是单个用户,而是某种表示层。使用自定义方法对用户进行身份验证,表示层有责任确保此方法正确完成(注意:我知道这不是正确的方法,但api不公开)。 我想传递每个请求的用户名(而不是密码),但是我不确定在哪里执行此操作。使用Authorization标头是个好主意吗?

2
JWT的有效载荷中应包括访问权限和角色吗?
JWT是否应包含有关客户端的权限和角色的信息? 在JWT令牌中具有此类信息将非常有用,因为每次有有效令牌出现时,都将更容易提取有关用户权限的信息,并且无需为此调用数据库。但是,将这样的信息包括在数据库中而不对它们进行仔细检查是否会带来安全问题? 要么, 诸如上述信息之类的信息不应成为JWT的一部分,而应该仅使用数据库来检查用户的访问角色和权限?

2
用于基于REST的应用程序的JWT身份验证的企业模式?
JWT规范仅描述了有效负载及其发送方式,但未启用身份验证协议,从而允许了灵活性,但非常不幸的是,灵活性可能导致反模式和设计错误。 我正在寻找一些经过深思熟虑且经过测试的JWT身份验证企业模式,可以使用或改编它,但未能找到完整的东西。 我在想的是: 当未满足任何授权标头或JWT令牌无效或已过期时,发送HTTP 401 为了进行身份验证,请使用/ login REST通道,将用户名和密码作为JSON对象发送 为了使令牌保持活动状态,请使用/ keepalive REST通道,每N(5)分钟调用一次,接收新的JWT令牌,并在每次调用后替换现有的令牌(令牌在M(15)分钟后过期) 但是,令我困扰的是该/ keepalive频道的必要性。另一方面,它迫使我防止身份验证过期,即使用户不在(该决定,如果我们希望仍然不执行keepalive的决定),当然,这是对协议的额外调用和额外复杂性。有趣的是,服务器会自动延长令牌。在基于会话的环境中,它是通过重置时间戳来实现的,但是,在这里,服务器将不得不发送新令牌,可能不是每次都发送一次,但是一旦令牌在R(例如10)分钟内到期,就必须发送新令牌。但是将其放在响应主体中将意味着修改JSON响应协议(因此,该解决方案具有侵入性且不透明),并且将客户端可以处理的额外HTTP标头不一定不一定是一个好模式。一世' 有没有可以解决我的问题的现成企业模式?我的协议草案是否可靠?与从头开始设计相比,我更喜欢使用现成的东西。

1
为所有用户缓存经过身份验证的请求
我正在开发一个Web应用程序,该应用程序必须处理需要授权的并发用户的巨大冲动,以请求相同的内容。在当前状态下,它甚至完全破坏了32核AWS实例。 (请注意,我们使用Nginx作为反向代理) 无法简单地缓存响应,因为在最坏的情况下,我们必须通过解码JWT来检查用户是否已通过身份验证。这要求我们启动Laravel 4 ,即使启用了PHP-FPM和OpCache ,它也很慢。这主要是由于繁重的自举阶段。 可能会问一个问题:“如果您知道这将成为一个问题,为什么首先要使用PHP和Laravel?” -但是现在再来做这个决定为时已晚! 可能的解决方案 提出的一种解决方案是将Auth模块从Laravel提取到一个轻量级的外部模块(以类似于C的方式编写),其职责是解码JWT并确定用户是否通过身份验证。 请求的流程为: 检查缓存是否命中(如果没有正常传递给PHP) 解码令牌 检查是否有效 如果有效,则从缓存中投放 如果无效,请告诉Nginx,然后Nginx将把请求传递给PHP进行正常处理。 一旦我们向单个用户提供了此请求,这将使我们不再打PHP,而是接触到轻量级模块来解决解码JWT以及此类auth附带的其他注意事项。 我什至在考虑直接将此代码作为Nginx HTTP扩展模块编写。 顾虑 我担心的是,我从未见过这样的事情,并且想知道是否有更好的方法。 同样,第二次您将任何用户特定的内容添加到页面,它完全杀死了该方法。 Nginx中是否可以直接使用另一种更简单的解决方案?还是我们必须使用像Varnish这样的更专业的东西? 我的问题: 上述解决方案有意义吗? 通常如何处理? 有没有更好的方法来实现类似或更好的性能提升?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.