Как проверить токен Azure приложения WPF в веб-API на сервере - PullRequest
1 голос
/ 29 мая 2019

У меня есть приложение WPF, оно будет аутентифицироваться с помощью Azure AD и вернет токен. При вызове методов Web API мы передаем этот токен на сервер. На сервере нам нужно проверить, чтобы токен действовал или нет. Не могли бы вы помочь мне для проверки кода на сервере

                string aadInstance = service.SelectSingleNode("AADInstance").InnerText;
                string tenant = service.SelectSingleNode("Tenant").InnerText;
                string clientId = service.SelectSingleNode("ClientId").InnerText;
                string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
                authContext = new AuthenticationContext(authority, new FileCache());
                Uri redirectUri = new Uri(service.SelectSingleNode("RedirectUri").InnerText);
                string resourceId = service.SelectSingleNode("ResourceId").InnerText;
                AuthenticationResult result = null;
             try
            {
                result = await authContext.AcquireTokenSilentAsync(resourceId, clientId);
            }
            catch (AdalException ex)
            {
                if (ex.ErrorCode == AdalError.UserInteractionRequired || ex.ErrorCode == AdalError.FailedToAcquireTokenSilently)
                {
                    result = await authContext.AcquireTokenAsync(resourceId, clientId, redirectUri, new PlatformParameters(PromptBehavior.Always));
                }
            }
            tocken = result.AccessToken;

Ответы [ 2 ]

0 голосов
/ 06 июня 2019
        {
            string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
            ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
            OpenIdConnectConfiguration config = configManager.GetConfigurationAsync().Result;
            TokenValidationParameters validationParameters = new TokenValidationParameters
            {
                ValidateAudience = false,
                ValidateIssuer = false,
                IssuerSigningKeys = config.SigningKeys, //.net core calls it "IssuerSigningKeys" and "SigningKeys"
                ValidateLifetime = true
            };
            JwtSecurityTokenHandler tokendHandler = new JwtSecurityTokenHandler();
            SecurityToken jwt;
            var result = tokendHandler.ValidateToken(token, validationParameters, out jwt);
            return jwt as JwtSecurityToken;
        }
0 голосов
/ 30 мая 2019

Похоже, вы пытаетесь проверить свой токен с помощью своего внутреннего кода.

Как только вы получите свой токен, вы можете использовать пакет System.IdentityModel.Tokens.Jwt nuget для проверки вашего токена.Для этого

Перейдите nuget package manager и найдите System.IdentityModel.Tokens.Jwt, добавьте эту ссылку в свой проект.См. Снимок экрана ниже:

enter image description here

Добавить следующую ссылку:

using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;

После установкипакет устанавливает следующий код:

Метод проверки токена:

private  bool ValidateToken(string yourToken)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var validationParameters = GetValidationParameters();

            SecurityToken validatedToken;
            IPrincipal principal = tokenHandler.ValidateToken(yourToken, validationParameters, out validatedToken);
            return true;
        }

Ваш параметр проверки токена:

static string key = "401b09eab3c013d4ca54922bb802bec8fd5318192b0a75f201d8b3727429090fb337591abd3e44453b954555b7a0812e1081c39b740293f765eae731f5a65ed1";

private static TokenValidationParameters GetValidationParameters()
        {
            return new TokenValidationParameters()
            {
                ValidateLifetime = false, // Because there is no expiration in the generated token
                ValidateAudience = false, // Because there is no audiance in the generated token
                ValidateIssuer = false,   // Because there is no issuer in the generated token
                ValidIssuer = "Sample",
                ValidAudience = "Sample",
                IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key)) // The same key as the one that generate the token
            };
        }

Примечание: подключите все эталон и проверьте.для более подробной информации вы можете обратиться здесь .Если у вас есть какие-либо вопросы, не стесняйтесь поделиться.Спасибо и счастливого кодирования!

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