我正在创建一个使用HTTPS的安全的基于Web的API; 但是,如果我允许用户使用查询字符串配置它(包括发送密码)这也是安全的,还是应该通过POST强制它?
我一直在关注本教程,将Google登录支持包含在我的桌面应用中.我正在使用的图书馆是这个.
一切正常,这是authorize()方法的实现:
public Credential authorize() throws IOException {
// Load client secrets.
InputStream in = GoogleLogin.class.getResourceAsStream("/google/client_secret.json");
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.build();
Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
return credential;
}
Run Code Online (Sandbox Code Playgroud)
但是,从一个Credential对象,我只能通过调用来检索访问令牌Credential.getAccessToken(),但我需要的是id token.如何在用户通过身份验证后从用户检索id_token?
反正是拿二进制文件 - 甚至是自己签名,然后回到代码中?我正在尝试恢复我之前删除的东西......但是这里有二进制文件.
有任何想法吗?
我正在开发一个通过OAuth2访问google-api的已安装应用程序.我目前知道一些安全问题没有真正的解决方案.无论我如何努力地模糊我的客户秘密,一个坚定的人可以检索和使用它.由此产生两个问题:
有人使用我的客户端密钥来修改用户数据:
到目前为止,似乎在没有使用刷新令牌时需要再次授权已安装的应用程序.但是,我不确定这是否是我使用的客户端API的一部分,或者是否在服务器端确保.如果在服务器端确保我很满意:)
有人使用我的客户端密码超出我的访问限制:
好的,这是谷歌特定的.只要我不付钱,我就有免费配额而且可以用尽.因此,有人可以使用我的客户端秘密来耗尽配额,没有其他客户端将能够访问它的数据:(我想不出真正的解决方案除了从未将服务升级到付费级别.
我想到的唯一安全解决方案是将网络服务器作为与谷歌交互的网关,并将访问令牌传输到客户端.或者它甚至可以保留令牌并只传输所请求的数据(在用户验证之后(openid ......等等))
结论是:我没有可以用作网关的网络服务器.因此,只要用户数据受到保护(没有人可以使用被盗的客户端密钥访问它而没有用户授予对新令牌的访问权限),我可以继续使用免费配额限制,看看它有多快,并且永远不会升级它.
对于这个主题的任何评论我都很高兴.谢谢!
我最近读到了关于iOS应用程序的反编译,现在我真的很关心它.如以下帖子(#1和#2)中所述,可以反编译分发到App Store的iOS.这可以通过越狱完成,我认为将应用程序从内存复制到硬盘.有了一些工具,就有可能
似乎无法对Cocoa代码进行逆向工程.
由于安全性是我创建的软件的一个特性,我想防止坏用户重建我的安全功能(用密钥加密或登录网站).所以我提出了以下问题:
NSStrings哪些不能用字符串读出或在汇编中读取?我知道人们可以对字符串进行模糊处理 - 但这仍然不安全,不是吗?之前已经问过类似的问题 ( 1 , 2 ),但没有明确回答:
它是安全的存储client id和client secret一个获得证书Installed application -> Other的谷歌API的命令行应用程序的分布式的源代码将被分配?或者,才有可能访问用户帐户或数据,而不在access_token用户同意授权?
Google API文档指定..:
.. 生成客户端 ID,在某些情况下,生成客户端机密,您将其嵌入到应用程序的源代码中。(在这种情况下,客户端机密显然不被视为机密。)
从其他文档中可以明显看出,这不是最佳实践:client_secret服务甚至不应该提供它,但目前它是oauth2和googleapiclient库(对于 Python)以及 Google 服务可能需要的。
该应用程序将使用oauth2基于这些官方示例。
非常感谢确认这是否真正安全的参考资料、良好的解释或文档。
google-api ×2
oauth ×2
assembly ×1
binary ×1
decompiler ×1
decompiling ×1
google-oauth ×1
https ×1
ios ×1
iphone ×1
java ×1
oauth-2.0 ×1
objective-c ×1
query-string ×1
security ×1
ssl ×1