我知道将api键放在前端总是一个坏主意。
我们正在设计一个WebAssembly应用程序,该应用程序通过Javascript api调用进行身份验证。其他用户可以获取我们提供的WebAssembly二进制文件,并在拥有api密钥的情况下构建自己的网站。
为减轻滥用,每个密钥必须绑定到用户指定的域名。 (就像Google的做法一样,我觉得这不是一种非常安全的方式...)
即使使用HTTPS,为了解决客户端可能在JS端修改api响应(这将传递到WebAssembly应用程序以确定身份验证状态)的问题,服务器端也对响应进行签名,并且WebAssembly应用程序嵌入了服务器公钥以验证在JS端收到后未修改的响应。
所以流程将会...
使用api键启动WebAssembly应用程序
->使用键作为参数和引荐来源的JS端调用auth api
->服务器检查域名(引荐)和密钥。返回签名的响应,该响应只能由WebAssembly应用(而不是JS客户端)进行验证。
->如果可以,请启动WebAssembly应用
但是引荐来源是可欺骗的。在这种情况下,我们正在考虑从WebAssembly端获取域名,然后使用密钥对域名进行加密以生成一个模糊的url参数。然后,服务器将能够解密该参数以获得正确的密钥和域名。
我想知道这是否是最好的方法,或者我们只是使事情变得更复杂而又没有获得真正的安全性。