Как я могу проверить подпись id_token от Azure AD B2C - PullRequest
0 голосов
/ 29 апреля 2020

Я настроил пользовательский поток в Azure AD B2 C. В результате id_token является JWT. Но как я могу проверить подпись этого JWT на API, который должен быть защищен этим JWT?

Вот пример JWT:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}
{
  "exp": 1587973546,
  "nbf": 1587969946,
  "ver": "1.0",
  "iss": "https://appmanager2020.b2clogin.com/903e0c59-0e1d-4769-8a57-0caba1f56999/v2.0/",
  "sub": "f11eaa2e-0bad-400a-864f-57f9daa70999",
  "aud": "8ab24fa8-a5f2-4f7d-a1ad-31f21d7f999",
  "nonce": "123456",
  "iat": 1587969946,
  "auth_time": 1587969946,
  "idp": "https://sts.windows.net/903e0c59-0e1d-4769-8a57-0caba1f56999/",
  "oid": "f11eaa2e-0bad-400a-864f-57f9daa70999",
  "emails": [
    "some@email.com"
  ],
  "tfp": "B2C_1_some_employee_flow"
}

Я попробовал этот URL без удачи:

https://login.microsoftonline.com/te/appmanager2020.onmicrosoft.com.onmicrosoft.com/b2c_1_xxx_employee_flow/discovery/v2.0/keys

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Насколько я знаю, нет никакого способа судить, является ли JWT законным, но при декодировании незаконного JWT будет выдано исключение, поэтому вы можете судить, является ли оно законным, перехватывая исключение.

Декодировать JWT:

publi c String parseToken (String jwt) {

    return Jwts.parser()
            .setSigningKey(SECRET_KEY)
            .parseClaimsJws(jwt)
            .getBody()
            .getSubject();
}

Проверка JWT:

publi c логическое значение isTokenValid (String jwt) {

    try {
        parseToken(jwt);
    } catch (Throwable e) {
        return false;
    }
    return true;
}
0 голосов
/ 01 мая 2020

Мы нашли URL ключей publi c и оттуда могли заставить его работать, используя код, подобный приведенному выше.

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