У меня есть сторонние поставщики входа (google и microsoft) на Azure для моего веб-приложения. Я также добавляю пользовательский логин (в случае, если у пользователя нет одной из этих учетных записей). У меня есть маркер генерируется следующим образом:Как вы проверяете JwtSecurityToken, подписанный с помощью WEBSITE_AUTH_SIGNING_KEY?
private JwtSecurityToken GenerateToken(User user)
{
var audience = ConfigurationManager.AppSettings["ValidAudience"];
var issuer = ConfigurationManager.AppSettings["ValidIssuer"];
JwtSecurityToken token = AppServiceLoginHandler.CreateToken(new Claim[] { new Claim(JwtRegisteredClaimNames.Sub, user.AzureUserID) },
GetSigningKey(),
audience,
issuer,
TimeSpan.FromHours(1));
return token;
}
Где GetSigningKey() возвращает строку переменной Azure среды WEBSITE_AUTH_SIGNING_KEY. Аутентификация по умолчанию с моими контроллерами API отлично работает, но когда мне нужно обновить токен из-за истечения срока его действия, у меня возникла проблема с подтверждением его подписи. Есть много примеров того, как проверить JwtSecurityTokens, но я не смог их найти, когда вы подписали его с помощью WEBSITE_AUTH_SIGNING_KEY. Вот что я пытался получить без успеха:
var validationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["ValidAudience"],
ValidIssuer = ConfigurationManager.AppSettings["ValidIssuer"],
IssuerSigningToken = <I think I need this, but not sure how to populate it...>,
ValidateAudience = true,
ValidateIssuer = true,
ValidateIssuerSigningKey = true
};
SecurityToken validatedToken;
tokenHandler.ValidateToken(expiredAccessToken, validationParameters, out validatedToken);
Есть ли у кого-нибудь идеи о том, как проверить токен?
Спасибо Адриану, но мой вопрос заключался не в том, как получить эту переменную окружения, а в том, как читать JwtSecurityToken, который уже был с ней связан. – lehn0058
В службе поддержки приложений он валидирован для вас. Просмотрите блог по адресу http://cgillum.tech - он содержит подробные сведения о том, что происходит под обложками, поэтому вы можете обойти проверку и просто прочитать претензии из переменных окружения и/или /.auth/me endpoint. –
Я могу обойти проверку подлинности, просто купив, просто удалив тег Authorize из моего метода контроллера. Мое дело в том, что я хочу сделать это, потому что у меня есть собственный пользовательский логин в дополнение к сборке в провайдерах (google и microsoft), и мне нужно обновить токен, срок действия которого истек. Мой вопрос состоял в том, как я все еще проверяю токен (который я, безусловно, НЕ пропускаю, поскольку любой вредоносный пользователь может отправить мне токен), когда он был подписан с помощью WEBSITE_AUTH_SIGNING_KEY. См. Мой ответ ниже, как я получил это, чтобы работать. – lehn0058