Как создать объект компактной сериализации JWS - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь понять аутентификацию с помощью openid connect

Я получил код авторизации, сервер может обменять его на токен доступа и идентификационный токен.

Я получил файл смой секретный ключ RSA:

 "keys": [
{
  "kty": "RSA",
  "d": "FVSxlyJTtDw .....",
  "dp": "dzTM-0C3 ....",
  "dq": "XxhRvZewnnvY22....",
  "e": "AQAB",
  "use": "sig",
  "kid": "s1",
  "alg": "RS256",
  "n": "pJADu0nyhCrh9XIR....",
  "p": "0ktANeYxLEB1uEDkSQ....",
  "q": "yFRFPKiUCelQ2c-vf,"
  "qi": "FhvccbxuaCXAO7iYq2H.....",
},
{
  "kty": "RSA",
  "d": "J7jk1r3-83KZ7zPrrG659kTVwbsYNJxB.....",
  "dp": "ALaPzpUH_1JpN6QmHKaAmruaRXYD_EJ6ZUcbNh".....",
  "dq": "bIfqm7lKkuEeTxuOHHt4Iv2ifn.....",
  "e": "AQAB.....",
  "use": "enc",
  "kid": "e1",
  "alg": "RSA-OAEP",
  "n": "jpEyL3uCZ1Grkg4sFTtAup0TxpZRiNb.....",
  "p": "908JDuuB980K6cIf9CHkxVET1.....",
  "q": "k5PU03Dl8qUpxArtTxT.....",
  "qi": "AIbn9n3zD5VaWfyxxcneY510KSkm.....",
}

]

Первый вопрос: почему у меня два ключа?

Затем, как мне извлечь секретный ключ?

Если я прочитал документ:

Поле «kty» значения «RSA» идентифицирует его как ключ RSA.Значения полей "n" и "e" являются модулем в кодировке base64url и (общедоступным) показателем (соответственно) с использованием минимально необходимого количества октетов.Значение поля "d" является частным показателем в кодировке base64url с использованием минимально необходимого числа октетов.Поля "p", "q", "dp", "dq" и "qi" являются дополнительной частной информацией в кодировке base64url с использованием минимального необходимого количества октетов.

Для 2048-битного ключаполе "n" имеет длину 256 октетов при декодировании, а поле "d" длиной не более 256 октетов при декодировании.

Из того, что я понимаю, секретный ключ, следовательно, является полем: d

 _keyPrivate = "FVSxlyJTtDw ....."; //field d:
            var client = new RestClient("https://test/oidc/token");
            var request = new RestRequest(Method.POST);
            request.AddHeader("cache-control", "no-cache");
            request.AddHeader("content-type", "application/x-www-form-urlencoded");
            request.RequestFormat = DataFormat.Json;
            request.AddParameter("grant_type", "authorization_code");
            request.AddParameter("code", _code);
            request.AddParameter("redirect_uri", "https://localhost:44302/");
            request.AddParameter("client_assertion", (headerEncoded + "." + payloadEncoded + "." + _keyPrivate ));
            request.AddParameter("client_assertion_type", "urn:ietf:params:oauth:client-assertion-type:jwt-bearer");

            IRestResponse response = client.Execute(request);

Но я получаю как ошибку:

{"error": "unauthorized_client", "detail": "Подписанное утверждение недействительно", "uid": "511334434"}

Можете ли вы мне помочь?

Я уже пробовал разные вещи, но безуспешно?

Нет ли способа загрузить файл .json в объект и извлечьзакрытый ключ?

Заранее спасибо

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