Безопасный токен на предъявителя с использованием алгоритма шифрования - PullRequest
0 голосов
/ 04 января 2019

В проекте WebApi, использующем Identity Framework и Owin, авторизация и аутентификация работают нормально. Следующим шагом я хочу сделать свой токен носителя более безопасным, и мне необходимо реализовать шифрование и дешифрование токенов носителя.

Зашифрованная строка будет расшифрована в Actionfilter перед проверкой. Есть ли рекомендуемый способ сделать это? Я пробовал многократную реализацию AES & DES, но я пытаюсь реализовать любой рекомендуемый способ сделать это.

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 Ответ

0 голосов
/ 04 января 2019

Да.Рекомендуемый способ не делать этого.Для этого не должно быть причин.

Имейте в виду причину существования OAuth / OpenID.Все дело в децентрализованной аутентификации.Вот почему эти токены кодируются base64.Таким образом, любой клиент может использовать эту третью сторону для идентификации пользователя.(Обратите внимание, что я не написал «авторизовать») Очевидно, что пользователь должен дать согласие, или провайдер идентификации отказывает в доступе на основе.(проверяя URL перенаправления или не зная клиента)

Также обратите внимание на разницу между openId и OAuth.Претензии - это концепция openID.Также концепция веб-токенов Json происходит от OpenID (не OAuth).OAuth не имеет читаемых токенов на предъявителя.Опять же: обратите внимание на назначение двух разных протоколов.Я попытался объяснить эти протоколы здесь: https://medium.com/@abstarreveld/oauth-and-openid-explained-with-real-life-examples-bf40daa8049f

На ваш вопрос: не шифруйте токены на предъявителя.Вы можете рассмотреть возможность использования ссылочных токенов вместо токенов jwt.Таким образом, становится намного сложнее читать содержимое этих токенов.Если вы действительно хотите, чтобы токены были нечитаемыми, создайте свою собственную реализацию JUST OAUTH.Используйте области вместо утверждений там.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...