Tag: authentication

我如何将JAAS授权检查委托给Shiro?

我正在开发一个服务器端应用程序,需要基于对象的身份validation和授权。 我喜欢Shiro的简单性,但为了兼容JAAS,我写了一个使用Apache Shiro作为底层机制的LoginModule。 但我的问题是,我无法find一个方法来委托JAAS授权检查Shiro。 我怎样才能做到这一点?

Google云端点限制…任何build议的解决scheme?

我是否认为云端点的优点具有以下限制: REST API不能部署到自定义域(它将保留在appspot.com上)。 唯一支持的身份validation是针对Google帐户的OAuth。 推论:目前不可能创build一个用户login/会话跟踪机制,这个机制是Google帐户不可知的(例如,用email作为用户名和密码)。 有没有计划去消除这些限制,如果是的话,ETA是什么?

服务器端处理JWT令牌的最佳实践

(从这个线程产生,因为这是一个真正的问题,而不是特定于NodeJS等) 我正在使用身份validation来实现REST API服务器,并且我已经成功实现了JWT令牌处理,以便用户可以通过带有用户名/密码的/ login端点进行login,然后从服务器密钥生成JWT令牌并返回给客户。 然后令牌在每个经过validation的API请求中从客户端传递到服务器,服务器密钥用于validation令牌。 但是,我正在试图了解确切地说明如何以及在多大程度上validation令牌的最佳实践,以build立真正安全的系统。 究竟应该参与“validation”令牌? 使用服务器密钥validation签名是否足够,还是应该交叉检查服务器中存储的某些数据的令牌和/或令牌载荷? 基于令牌的authentication系统只会像每个请求中传递用户名/密码一样安全,只要获取令牌的难度要高于获取用户的密码。 但是,在我看到的例子中,生成令牌所需的唯一信息是用户名和服务器端的秘密。 这是否意味着假设一个恶意用户获得了有关服务器机密的知识,他现在可以代表任何用户生成令牌,从而不仅可以访问给定用户,而且密码是获得,但实际上所有的用户帐户? 这带来了我的问题: 1)JWT令牌validation是否应限于validation令牌本身的签名,仅依赖服务器秘密的完整性,还是附带单独的validation机制? 在某些情况下,我已经看到了令牌和服务器会话的组合使用,在通过/ login端点成功login后,会话被build立。 API请求validation令牌,并将令牌中发现的解码数据与会话中存储的一些数据进行比较。 但是,使用会话意味着使用cookie,从某种意义上讲,它违背了使用基于令牌的方法的目的。 这也可能会导致某些客户的问题。 可以想象,服务器将所有令牌当前正在使用的内存caching或类似内容保留下来,以确保即使服务器秘密受到攻击,攻击者可以生成“有效”令牌,但只能通过/ login端点生成的确切令牌会被接受。 这是合理的还是多余的/矫枉过正的? 2)如果JWT签名validation是validation令牌的唯一手段,意味着服务器秘密的完整性是突破点,那么应该如何pipe理服务器机密? 从环境variables中读取并在每个已部署的堆栈上创build(随机化?)一次? 重新定制或定期轮换(如果是的话,如何处理在循环之前创build的现有有效令牌,但需要在循环后进行validation,如果服务器在任何给定的时间保持当前秘密和先前的秘密, ? 别的东西? 当涉及到服务器机密被泄密的风险时,也许我只是过于偏执狂,这当然是一个更加普遍的问题,需要在所有密码的情况下解决。

如何使用Firebaselogin多个社交服务?

我希望用户能够使用多个不同的身份validation提供程序(例如Facebook,Twitter或Github)对我的Firebase应用程序进行身份validation。 一旦通过身份validation,我希望用户可以访问同一个帐户,无论他们使用哪种身份validation方法。 换句话说,我想在应用程序中将多个auth方法合并到一个帐户中。 如何在Firebase应用中执行此操作?

REST API授权和authentication(网页+手机)

我已阅读oAuth,亚马逊REST API,HTTP基本/摘要等,但不能把它全部“一块”。 这可能是最接近的情况 – 为移动应用程序创buildAPI – 身份validation和授权 我想build立以API为中心的网站 – 服务。 所以(一开始)我会有一个API在中心和网站 (PHP + MySQL)通过networking接口通过cURL , Android和iPhone连接。 所以3个主要客户 – 3个API密钥。 而任何其他开发者也可以通过API接口开发,他们将获得自己的API密钥。 API行为将被接受/拒绝基于userLevel状态,如果我是一个pipe理员我可以删除任何东西等,所有其他可以操纵只有他们的本地(帐户)数据。 首先,授权 – 我应该使用oAuth + xAuth还是我自己的某种types的实现(请参阅http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/RESTAuthentication.html?r=9197 )? 据我所知,在亚马逊服务用户是== API用户(有API密钥) 。 在我的服务上,我需要将标准用户/帐户(在网站上注册的用户)和开发者帐户(应该有他们的API密钥)分开。 所以我首先需要授权API密钥 ,然后validation用户本身。 如果我使用亚马逊的scheme来检查开发人员的API密钥(授权他们的应用程序),我应该使用什么样的用户身份validation? 我读了关于通过api.example.org/auth (通过HTTPS ,HTTP Basic)发布我的用户名和密码,然后每转发一次请求。 如果我在Android和网站上同时login,如何pipe理令牌? 如果我只在第一次请求时(在传输用户名和密码的时候)只使用SSL,而在另一端只使用HTTP,那么中间人攻击又如何呢? 在这个例子中是不是一个问题保护REST服务的密码?

将API密钥放在标题或url中

我正在为公司的数据devise一个公共API。 我们希望应用程序开发人员注册一个API密钥,所以我们可以监视使用和过度使用。 由于API是REST,我最初的想法是把这个键放在一个自定义的头文件中。 我就是这样看到谷歌,亚马逊和雅虎这样做的。 另一方面,我的老板认为,如果密钥简单地成为URL的一部分,则API更易于使用,例如“http://api.domain.tld/longapikey1234/resource”。 我猜这有些事情要说,但它有点违反了URL的原则,只是简单地说明你想要的东西,而不是如何或为什么你想要它。 你会发现把密钥放在URL中是合乎逻辑的吗? 或者,如果将一个简单的JavaScript前端写入某些数据,您是不是必须手动设置HTTP标头?

智威汤逊与OAuth身份validation

我有一个使用JWT的无状态身份validation模型的新SPA。 我经常被要求引用OAuth进行authenticationstream程,例如要求我为每个请求发送“承载令牌”,而不是简单的令牌标头,但我认为OAuth比简单的基于JWT的authentication要复杂得多。 主要的区别是什么?我应该让JWTauthentication像OAuth一样吗? 我也使用JWT作为我的XSRF-TOKEN来防止XSRF,但是我被要求将它们分开? 我应该让他们分开吗? 任何帮助在这里将不胜感激,可能会导致一个社区的指导方针。

“git push heroku master”仍然要求authentication

我已经执行了: $ heroku login 但是当我尝试推送时,我仍被要求进行身份validation: $ git push heroku master Username for 'https://git.heroku.com': <email> Password for 'https://<email>@git.heroku.com': 然后我得到一个警告:不要使用用户名和密码使用Git进行身份validation。 我再次运行herokulogin和authentication成功,但我仍然得到同样的失败。 我检查了遥控器: $ git remote -v heroku https://git@heroku.com/appname.git (fetch) heroku https://git@heroku.com/appname.git (push) 我也生成了一个新的公钥,传递给Heroku,并validation它: https : //devcenter.heroku.com/articles/keys 我在Windows 8上,与Git 1.9.5。

不应该Android AccountManager在每个App / UID基础上存储OAuth令牌吗?

Android的AccountManager似乎为具有不同UID的应用获取相同的caching身份validation令牌 – 这是安全的吗? 它似乎与OAuth2不兼容,因为访问令牌不应该在不同的客户端之间共享。 背景/上下文 我正在构build一个Android应用程序,该应用程序使用OAuth2将REST API请求authentication/授权给我的服务器,这是一个OAuth2提供程序。 由于该应用程序是“官方”应用程序(而不是第三方应用程序),因此它被视为受信任的OAuth2客户端,所以我正在使用资源所有者密码stream获取OAuth2令牌:用户(资源所有者)将他的用户名/密码input到应用程序中,然后将其客户端ID和客户端密码连同用户凭证一起发送到我的服务器的OAuth2令牌端点,以交换可用于进行API调用的访问令牌,当刷新令牌到期时用于获取新的访问令牌。 理由是在设备上存储刷新令牌比用户的密码更安全。 我正在使用AccountManagerpipe理设备上的帐户和关联的访问令牌。 由于我提供了自己的OAuth2提供程序,因此我通过扩展AbstractAccountAuthenticator和其他必需的组件来创build自己的自定义帐户types,如本Android Dev Guide中所述,并在SampleSyncAdapter示例项目中演示。 我可以在我的应用程序中成功添加自定义types的帐户,并通过“帐户和同步”Android设置屏幕pipe理这些帐户。 问题 但是,我关心的是AccountManagercaching和发布授权令牌的方式,具体来说, 对于给定的账户types和令牌types , 同一个授权令牌似乎可以被用户授权访问的任何应用访问。 要通过AccountManager获得授权令牌,必须调用AccountManager.getAuthToken() ,除其他外,传递为其获取授权令牌和期望的authTokenType的Account实例。 如果指定帐户和authTokenType存在authentication令牌,并且用户授予对已经作出authentication令牌请求的应用的访问(通过授予“访问请求”屏幕)(在请求应用的UID不匹配的情况下authentication者的UID),那么令牌被返回。 如果我的解释缺乏, 这个有用的博客条目解释得非常清楚。 基于这篇文章,在考察了AccountManager和AccountManagerService (一个为AccountManager负责的内部类)的来源之后,看起来每个authTokenType /账户组合只有一个授权令牌存储。 所以, 如果恶意应用程序知道我的身份validation器使用的帐户types和authTokenType,则可能调用AccountManager.getAuthToken()来访问我的应用程序存储的OAuth2令牌,假设用户授予访问恶意应用程序。 对我来说,问题是AccountManager的默认caching实现build立在一个范例上,如果我们要分层的OAuth2authentication/授权上下文,它会认为电话/设备是服务/资源提供者的单个OAuth2客户端。 然而,对我来说有意义的范例是每个应用程序/ UID应被视为自己的OAuth2客户端。 当我的OAuth2提供程序发出访问令牌时,会为该特定应用程序发出访问令牌,该令牌已发送正确的客户端ID和客户端密钥,而不是设备上的所有应用程序。 例如,用户可能同时拥有我的官方应用程序(称为应用程序客户端A)和使用我的API(称为应用程序客户端B)的“许可”第三方应用程序。 对于官方客户端A,我的OAuth2提供者可能会发出一个“超级”types/范围令牌,授权访问我的API的公共和私有片段,而对于第三方客户端B,我的提供者可能会颁发“受限”types/范围令牌,只允许访问公共API调用。 应用程序客户端B不可能获得应用程序客户端A的访问令牌,目前的AccountManager / AccountManagerService实现似乎允许。 因为,即使用户向客户端A的超级令牌授予客户端B的授权,事实仍然是,我的OAuth2提供者仅仅意图将该令牌授予给客户端A. 我在这里忽略了什么? 我认为应该以每个应用程序/ UID为基础(每个应用程序是一个独立的客户端)发布授权令牌,理性/实用,或者是每个设备的授权令牌(每个设备是客户端)的标准/接受实践? 或者,在我对AccountManager / AccountManagerService周围的代码/安全性限制的理解中是否存在一些缺陷,使得这个漏洞实际上不存在? 我已经使用AccountManager和我的自定义身份validation器testing了上述客户端A /客户端Bscheme,而我的testing客户端应用程序B具有不同的包范围和UID,能够获得我的服务器为我发放的身份validation令牌testing客户端应用程序A通过传入相同的authTokenType (在此期间,我被提示“访问请求”授予屏幕,我批准,因为我是一个用户,因此无能为力)… 可能的解决scheme 一个。 “秘密”authTokenType 为了获得auth令牌,必须知道authTokenType ; 应该将authTokenType作为一种客户端秘密来处理,使得只有那些知道秘密令牌types的“已授权”的客户端应用程序才能获得给定秘密令牌types的令牌? 这似乎不是很安全; […]

Django Rest框架中的用户authentication+ Angular.js Web应用程序

我正在开发一个web应用程序,用户可以login查看他们的在线酒窖。 我有Django REST模型设置,以及Angular中的前端devise,但是我很难将这些部分放在一起,而我的主要问题是用户身份validation。 我已经阅读了很多post在这里和各种教程,但我似乎无法find一步一步的方法来实现身份validation: 什么样的authentication应该使用(令牌,会话,其他?) 在服务器端如何pipe理身份validation(在UserModel或UserManager中是一个视图吗?) 我有一个自定义用户模型(使用电子邮件作为用户名)。 我可以使用通用的Djangologin方法,还是需要创build自己的? 如何在服务器和客户端之间pipe理身份validation过程? 据我所知,Angular在DRFvalidation用户名和密码匹配的URL上发出POST请求,并返回一个令牌或其他validation证据。 我觉得我很接近,但我需要一个更普遍的看法,这是如何工作把碎片放在一起。 提前致谢