Проверка токена Azure AD Jwt без интернета - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть .net core web api, который работает на компьютере в корпоративной сети A и не имеет доступа к Интернету.Затем у меня есть веб-сайт в интрасети B , который аутентифицирован в Azure AD.Я хочу отправить запрос от B до A с заголовком Authentication: JwtTokenFromAzure.Каков наилучший вариант для проверки этого токена?

1 Ответ

0 голосов
/ 13 декабря 2018

Чтобы проверить id_token или access_token, ваше приложение должно проверить как подпись токена , так и претензий .Вы можете вручную проверить токен с помощью jwt.io или также можете использовать код.

Чтобы вручную проверить токен, сначала необходимо проверить его подпись.Токены, выпущенные Azure AD, подписаны с использованием отраслевых стандартных алгоритмов асимметричного шифрования, заголовок JWT содержит информацию о ключе и методе шифрования, используемом для подписи токена.

enter image description here

Примечание: утверждение alg указывает алгоритм, который использовался для подписи токена, в то время как утверждение kid указывает конкретный открытый ключ, который использовался для подписи токена.Конечная точка v1.0 возвращает утверждения x5t и kid, в то время как конечная точка v2.0 отвечает только заявкой child.

Это образец заголовка токена v1.Здесь вы можете использовать значение kid, чтобы найти соответствующий открытый ключ (x5c) в jwks_uri , используя документ метаданных OpenID Connect .

enter image description here

И затем в jwt.io вставьте значение x5c в поле открытого ключа в формате:

enter image description here

и в следующем формате: enter image description here

Подробнее см. Здесь .

Если выЕсли вы хотите использовать код для проверки токена, для вас есть пример:

public JwtSecurityToken Validate(string token)
 {
     string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";

     ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint);

     OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result;

     TokenValidationParameters validationParameters = new TokenValidationParameters
     {
         ValidateAudience = false,
         ValidateIssuer = false,
         IssuerSigningTokens = config.SigningTokens,
         ValidateLifetime = false
     };

     JwtSecurityTokenHandler tokendHandler = new JwtSecurityTokenHandler();

     SecurityToken jwt;

     var result = tokendHandler.ValidateToken(token, validationParameters, out jwt);

     return jwt as JwtSecurityToken;
 }

Подробнее о примере кода см. В этом случае .

...