我正在开发一个通过OAuth2访问google-api的已安装应用程序.我目前知道一些安全问题没有真正的解决方案.无论我如何努力地模糊我的客户秘密,一个坚定的人可以检索和使用它.由此产生两个问题:
有人使用我的客户端密钥来修改用户数据:
到目前为止,似乎在没有使用刷新令牌时需要再次授权已安装的应用程序.但是,我不确定这是否是我使用的客户端API的一部分,或者是否在服务器端确保.如果在服务器端确保我很满意:)
有人使用我的客户端密码超出我的访问限制:
好的,这是谷歌特定的.只要我不付钱,我就有免费配额而且可以用尽.因此,有人可以使用我的客户端秘密来耗尽配额,没有其他客户端将能够访问它的数据:(我想不出真正的解决方案除了从未将服务升级到付费级别.
我想到的唯一安全解决方案是将网络服务器作为与谷歌交互的网关,并将访问令牌传输到客户端.或者它甚至可以保留令牌并只传输所请求的数据(在用户验证之后(openid ......等等))
结论是:我没有可以用作网关的网络服务器.因此,只要用户数据受到保护(没有人可以使用被盗的客户端密钥访问它而没有用户授予对新令牌的访问权限),我可以继续使用免费配额限制,看看它有多快,并且永远不会升级它.
对于这个主题的任何评论我都很高兴.谢谢!
有没有办法缩短 Rust 中的泛型类型边界?这是我必须放置很多结构体实现等的混乱:
pub struct IncomingClientMessageWithAddress<State, Msg>
where State: AppState + Clone + serde::Serialize + serde::de::DeserializeOwned + std::marker::Unpin + 'static,
Msg: AppEvent + Clone + serde::Serialize + serde::de::DeserializeOwned + std::marker::Unpin + 'static {
...
Run Code Online (Sandbox Code Playgroud)
我基本上希望做这样的事情(我知道以下不适用于特征):
type MyStateAlias = AppState + Clone + serde::Serialize + serde::de::DeserializeOwned + std::marker::Unpin + 'static;
type MyEventAlias = AppEvent + Clone + serde::Serialize + serde::de::DeserializeOwned + std::marker::Unpin + 'static;
pub struct IncomingClientMessageWithAddress<State, Msg>
where State: MyStateAlias,
Msg: MyEventAlias {
...
Run Code Online (Sandbox Code Playgroud)