Передача JWT в отношении политики проверяющей стороны приводит к "неверному утверждению клиента", причина "формат jwt" - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь отправить JWT в мою политику проверяющей стороны и на нее ссылаются через <InputTokenFormat>JWT</InputTokenFormat>, но мне трудно получить B2C для проверки токена.Интересно, кто-нибудь может определить проблему.

Ошибка

Возвращается из B2C после вызова конечной точки авторизации и передачи client_assertion в строке запроса:

AADB2C90017:Клиентское утверждение, указанное в запросе, недопустимо: в качестве ключа проверки использовался «client_secret»

Client_secret - это секрет подписи, созданный вручную в области политики IEF для совместного использования с приложением.Но, честно говоря, я не могу сказать, является ли эта ошибка просто полезным фактом: «client_secret» - это ключ, с помощью которого политика пытается проверить, ИЛИ говорит мне , почему запрос недействителен: 'client_secret"неправильно использовался в качестве ключа подтверждения.

Из приложения Insights

              {
              "Key": "Exception",
              "Value": {
                "Kind": "Handled",
                "HResult": "80131500",
                "Message": "The client assertion provided in the request is invalid: 'client_secret' was used as the verification key",
                "Data": {
                  "IsPolicySpecificError": false
                },
                "Exception": {
                  "Kind": "Handled",
                  "HResult": "80131500",
                  "Message": "The validation of the JWT failed. Reason: jwt format",
                  "Data": {}
                }
              }

Декодированный JWT : (обратите внимание, что инструкция audидентификатор клиента моего приложения)

{
  "alg": "HS256",
  "typ": "JWT"
}
.{
  "verified_email": "markarnolditpro@gmail.com",
  "nbf": 1554098875,
  "exp": 1554530875,
  "iat": 1554098875,
  "iss": "https=mytenant.b2clogin.com/34d8169d-0e97-4cc7-a8d0-57c29404f1b1/v2.0/",
  "aud": "7c93185b-05c7-4d72-b8c9-bd62e7bfefc5" 
}
.[Signature]

URL-адрес политики:

https://mytenant.b2clogin.com/mytenant.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1A_Invitation
&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
&client_assertion=<JWT base64 header.body.signature>
&client_id=7c93185b-05c7-4d72-b8c9-bd62e7bfefc5
&response_mode=form_post
&response_type=id_token
&redirect_uri=http://localhost:34647/
&scope=openid
&nonce=123123123sdfsdfsdf

Подпись

I 'я создал ключ IEF, сгенерировал вручную, подписал секрет и поделился значением с приложением. Я ссылаюсь на ключ из политики проверяющей части следующим образом: <Key Id="client_secret" StorageReferenceId="B2C_1A_ADB2CMgtAPISecret" />

Создать маркер

Этот код по большей части взят из приложения WingTipGames

private static string CreateSelfIssuedToken(
        string issuer,
        string audience,
        TimeSpan expiration,
        string signingSecret,
        ICollection<Claim> claims)
    {
        var tokenHandler = new JwtSecurityTokenHandler();
        var nowUtc = DateTime.UtcNow;
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(signingSecret));
        var signingCredentials = new SigningCredentials(key, "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256");

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Audience = audience,
            Expires = nowUtc.Add(expiration),
            IssuedAt = nowUtc,
            Issuer = issuer,
            NotBefore = nowUtc,
            SigningCredentials = signingCredentials,
            Subject = new ClaimsIdentity(claims)
        };

        var token = tokenHandler.CreateToken(tokenDescriptor);
        return tokenHandler.WriteToken(token);
    }

Я уверен, что для подписи и проверки JWT используется один и тот же секрет подписи. Но яя действительно стреляю вслепую как конкретный формат jwt, который нужен. Есть мысли? Пока я думаю:

  • простая проблема urlEncoding где-то
  • проблема с синхронизацией часов между клиентом и сервером
  • Я пропускаю некоторые утверждения, или они неправильно указаны в токене

Спасибо Марк

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