如何隐藏存储在Angular应用中的OAuth凭据?

时间:2019-04-01 07:09:55

标签: angular api oauth

我正在使用Angular 7应用程序,该应用程序在另一台服务器上执行API调用。该API需要Oauth1授权。

我担心的是OAuth1凭据在dist/main.js文件中可见,并且显然我想隐藏此信息。

我首先考虑过使用任何编码方法对凭据进行编码,然后在执行API调用之前对其进行解码。但是该解决方案无效,因为可以访问前端应用程序的任何代码,并且编码/解码方法也不例外。

我还考虑过将凭据存储在前端服务器端的数据库中,并由Angular应用程序直接访问,但是我想知道这对我的需求是否有点“过多”。

当前,凭据是助手类的属性:

export class OAuth1Authorization implements IAuthorization {
    private token = {
        consumerKey: '...',
        consumerSecret: '...',
        accessToken: '...',
        tokenSecret: '...'
    };
    private signatureMethod = 'HMAC-SHA1';
    private version = '1.0';
    private nonce;
    // ...
}

最后一点,例如,我的用例不是 ,而不是存储用户名/密码验证后由远程服务器返回的令牌,这一点我想非常清楚。

我的需求实际上是以安全的方式存储的(例如,以便不能以明文形式访问连接信息!)4个令牌,应该在前端和服务器上事先知道后端,并且暂时不会改变。

1 个答案:

答案 0 :(得分:2)

不幸的是,OAuth1不是为现代JS应用程序设计的:身份验证是必需的秘密,并且您注意到,没有完全防弹的方式在客户端存储它。

无论您在哪里隐藏它,如何对其进行编码,它都会在您的应用程序的某个时刻被解码,并可以通过调试器轻松地检索到。

OAuth1文档页面(https://oauth1.wp-api.org/docs/advanced/Web.html)建议使用最小代理,该代理知道秘密并可以在Web客户端向其发送非秘密参数时执行身份验证。