Articles of security

在node.js服务器中validationGoogle授权的OAuth令牌的正确方法是什么?

我正在尝试将Android平台的移动应用程序validation为自定义node.js服务器api。 我想使用Google OAuth2令牌而不是推出自己的身份validation,因为安装了Google Play的Android设备可以让应用开发者使用它。 我正在使用此处记录的Google Play服务库中的GoogleAuthUtil.getToken调用。 我正在尝试遵循这个Android开发者博客post中提出的建议 在我的例子中, getToken方法返回一个长857字节的字符串。 如果我尝试将此令牌传递给Google的TokenInfo端点,则会返回: {‘error’:’invalid_token’,’error_description’:’无效值’} 我在这做错了什么? 在getToken调用的“范围”中,我发送: audience:server:client_id:**i_put_my_clientid_here** 。 我为“已安装的应用程序”生成了一个clientid。 使用此客户端ID,对getToken的调用根本不起作用。 当我为“服务帐户”生成客户端ID时,调用成功,但是如上所述,当传递给TokenInfo端点时,我得到一个857字节的令牌失败。 编辑:我还为“Web应用程序”创建了一个客户端ID,因为它似乎是调用getToken时使用的正确客户端ID。 但行为是一样的,我得到一个857字节的令牌,在调用谷歌的终端时不会validation。 如何在Android上使用Google Play服务正确获取有效的身份validation令牌? 一旦我有了正确的令牌,什么是正确的node.js库来validation服务器端? 我可以使用passport-google-oauth吗?

facebook如何使用密钥哈希validation应用程序的真实性?

在使用Facebook开发Android应用程序时,您需要将应用程序的密钥哈希上传到其网站。 有了这个,他们声称他们能够validation他们的服务器的调用实际上是从您的应用程序。 我已经读过这个问题Facebook如何validation移动应用程序,但它并没有真正提供实际的实现。 我试过查看facebook库的源代码,但无法弄明白。 从Android应用程序发送哪些数据以及可以在服务器中针对此哈希validation的加密? facebook实施的方法是否安全? 如果是,并且它可以在任何服务器中实现,我可以使用它来validation我的服务器我的应用程序没有使用不同的代码重新编译(这往往经常发生:() 我目前正在以这种方式实现这个想法: Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures; for (Signature sig : sigs) { verifyInServer(sig.hashCode()); } 其中verifyInServer是伪代码,用于针对具有签名存储值的服务器进行的检查。 它现在已经工作了,但我不确定它是否安全,而且我宁愿检查一个密钥哈希(它的公共)而不是这个签名数据(我不确定它是否是私有的,而不是可以欺骗的用户 )。

在Android的共享首选项中安全地存储Oauth2访问/刷新标记?

我知道我可以将值设置为“MODE_PRIVATE”,只有我的应用程序/用户ID将能够访问它们,但是,有什么方法让用户在任何时候访问它们? 那么将它们存储在共享首选项中是否“安全”,还是有更好的地方? 此外,如果我稍后决定公开某些用户设置的偏好,我是否可以隐藏这些值? 谢谢。 编辑:我也知道内部存储,但我想知道是否可以实现更简单的共享首选项。

在bouncycastle中是否支持RSA PKCS1-OAEP填充?

我正在Java / Android中实现encryption代码以匹配iOSencryption。 在iOS中,使用以下填充scheme使用RSA进行encryption:PKCS1-OAEP 但是,当我尝试使用PKCS1-OAEP创build密码时。 Cipher c = Cipher.getInstance("RSA/None/PKCS1-OAEP", "BC"); 以下是堆栈跟踪 javax.crypto.NoSuchPaddingException: PKCS1-OAEP unavailable with RSA. at com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineSetPadding(CipherSpi.java:240) at javax.crypto.Cipher.getCipher(Cipher.java:324) at javax.crypto.Cipher.getInstance(Cipher.java:237) 也许这个RSA/None/PKCS1-OAEP不正确? 但是找不到任何明确的答案来说明PKCS1-OAEP不被支持或者定义它的正确方法。 我正在使用海绵城堡库,所以有充分的bouncycastle实现。