代码之家  ›  专栏  ›  技术社区  ›  Muhammad Saqlain

使用加密算法的安全承载令牌

  •  0
  • Muhammad Saqlain  · 技术社区  · 6 年前

    在使用Identity framework和Owin的WebApi项目中,授权和身份验证工作正常。下一步是我想使我的承载令牌更安全,并需要实现对承载令牌的加密和解密。

    AES实施:

    static byte[] Encrypt(string plainText, byte[] Key, byte[] IV) {  
            byte[] encrypted;  
            // Create a new AesManaged.    
            using(AesManaged aes = new AesManaged()) {  
                // Create encryptor    
                ICryptoTransform encryptor = aes.CreateEncryptor(Key, IV);  
                // Create MemoryStream    
                using(MemoryStream ms = new MemoryStream()) {  
                    // Create crypto stream using the CryptoStream class. This class is the key to encryption    
                    // and encrypts and decrypts data from any given stream. In this case, we will pass a memory stream    
                    // to encrypt    
                    using(CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) {  
                        // Create StreamWriter and write data to a stream    
                        using(StreamWriter sw = new StreamWriter(cs))  
                        sw.Write(plainText);  
                        encrypted = ms.ToArray();  
                    }  
                }  
            }  
            // Return encrypted data    
            return encrypted;  
        }  
        static string Decrypt(byte[] cipherText, byte[] Key, byte[] IV) {  
            string plaintext = null;  
            // Create AesManaged    
            using(AesManaged aes = new AesManaged()) {  
                // Create a decryptor    
                ICryptoTransform decryptor = aes.CreateDecryptor(Key, IV);  
                // Create the streams used for decryption.    
                using(MemoryStream ms = new MemoryStream(cipherText)) {  
                    // Create crypto stream    
                    using(CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) {  
                        // Read crypto stream    
                        using(StreamReader reader = new StreamReader(cs))  
                        plaintext = reader.ReadToEnd();  
                    }  
                }  
            }  
            return plaintext;  
        }  
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Clark Kent    6 年前

    对。建议不要这样做。不应该有这样做的理由。

    还要注意openId和OAuth之间的区别。声明是一个openID概念。jsonwebtokens的概念也来自OpenID(而不是OAuth)。OAuth没有可读的承载令牌。再次:注意两个不同协议的目的。我试着在这里解释这些协议: https://medium.com/@abstarreveld/oauth-and-openid-explained-with-real-life-examples-bf40daa8049f

    对于您的问题:不要加密承载令牌。您可以考虑使用引用令牌而不是jwt令牌。这样就很难读取这些标记的内容。如果您真的希望令牌不可读,请创建自己的owin实现。使用范围而不是声明。

    希望这有帮助!