【问题标题】:Angular 2 - encrypt password while sending from angular 2 to web apiAngular 2 - 从 Angular 2 发送到 web api 时加密密码
【发布时间】:2017-08-12 22:33:31
【问题描述】:

我是 Angular 2 开发的新手。在我的应用程序中,我有登录模块,其中将用户名和密码 [纯文本] 传递给 Web APi 控制器以从 Angular 服务类进行身份验证。

下面是我调用 web api 的 angular 2 服务方法。

authenticate(model) {        
    let headers = new Headers({ 'Content-Type': 'application/json; charste=utf-8' });
    let options = new RequestOptions({ headers: headers });

    let body = JSON.stringify(model);
    return this.http.post('http://localhost:24314/api/Users/', body, options)
        .map(response => response.json()).catch(this.handleErrorObservable);
}

我想在发送到 web api 时加密这个密码字段。

任何帮助或建议将不胜感激。

提前致谢。

【问题讨论】:

    标签: angular asp.net-web-api


    【解决方案1】:

    要将凭据传递到您的服务器,请通过 HTTPS 发送它们;无需自己加密它们。将所有内容发送到 HTTPS;今天,HTTP 不再是一个可靠的选择。

    凭据不应出现在您的代码中,而应由用户以表格形式输入。您将它们放在内存中并将它们发送到服务器。理想的情况是服务器将它们交换为身份验证令牌,因此您接下来可以将此令牌存储在客户端上(例如在本地存储中)。然后,您可以通过将令牌发送到每个请求(当然始终使用 HTTPS)向服务器验证您的用户。

    【讨论】:

    • 是的 https 无疑是最好的选择之一 :)
    • @gentiane。完全同意 HTTPS 选项。
    【解决方案2】:

    最好和最简单的密码加密方法是javascript btoa方法,你可以这样使用它

    authenticate(model) {        
        let data = btoa(model.user_name + ':' + model.password);
        let headers = new Headers({ 'Content-Type': 'application/json; charste=utf-8' });
        let options = new RequestOptions({ headers: headers });
    
        let body = JSON.stringify(data);
        return this.http.post('http://localhost:24314/api/Users/', body, options)
            .map(response => response.json()).catch(this.handleErrorObservable);
    }
    

    通过使用它,您不必使用任何第三方库进行加密或类似的东西 更多信息请参考这里

    【讨论】:

    • btoa 绝对不用于加密任何东西。它只是用base64编码一个字符串,任何人都可以解码。
    • 是的,我知道任何人都可以解码它,但不是普通用户,是的,没有网站也使用相同的技术。而这只是一个选项
    • 在您的帖子中您说 btoa 可以加密密码。 btoa 不是加密算法,它只是一种编码算法。那是完全不同的。任何人都可以解码。
    • 是的,我的措辞可能是错误的,是的 btoa 是一种编码算法。你是对的
    • @gentiane 感谢您的意见和建议,但刚刚看到以下答案,最好使用 HTTPS。
    【解决方案3】:
    authenticate(model) {        
        let headers = new Headers({ 'Content-Type': 'application/json; charste=utf-8' });
        let options = new RequestOptions({ headers: headers });
    
        model.pass = yourEncryptionFunction(model.pass, 'superStringPass');
    
        let body = JSON.stringify(model);
        return this.http.post('http://localhost:24314/api/Users/', body, options)
            .map(response => response.json()).catch(this.handleErrorObservable);
    }
    
    yourEncryptionFunction(password: string, cryptoKey: string): string {
        // .. do something here.. use a lib or just add a static value..
        return ....;
    }
    

    问题是,每个人都可以看到您的加密方法及其使用的加密密钥或其他任何东西......所以这样做并没有真正的好处。 :)

    有趣的库:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      相关资源
      最近更新 更多