Я использую действенные сообщения (с веб-приложением Outlook) для вызова приложения логики. Поэтому я получаю токен на предъявителя в запросе:
«Действие-Авторизация»: «Несущий эйJ0eXAi ...»
CallStack:
Outlook web app -> Logic App -> my endpoint hosted in azure
Теперь я попытался проверить токен с помощью jwt.io, но получил сообщение о том, что подпись недействительна.
Поэтому я попытался проверить это в c # с JwtSecurityTokenHandler
.
Я пытался добавить https://substrate.office.com/sts/
в список издателей, но похоже, что проверка даже не дошла.
Я использую следующий код для проверки токена jwt, выданного office.com:
bool IsAuthorized(HttpActionContext actionContext)
{
var valid = base.IsAuthorized(actionContext);
// Custom handle for Bearer token, when invalid from base-class
if (!valid && actionContext.Request.Headers.Authorization.Scheme == "Bearer")
{
var jwt = actionContext.Request.Headers.Authorization.Parameter;
var th = new JwtSecurityTokenHandler();
var sjwt = th.ReadToken(jwt) as JwtSecurityToken;
var validationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = false,
//IssuerSigningToken = sjwt,
ValidateActor = false,
ValidateAudience = false,
ValidateIssuer = true,
ValidateLifetime = true,
ValidIssuers = new[] { "https://substrate.office.com/sts/" },
ValidAudiences = new[] {"https://XXX.logic.azure.com"}
};
SecurityToken validatedToken;
try
{
th.ValidateToken(jwt, validationParameters, out validatedToken);
}
catch (Exception ex)
{
return false;
}
}
return valid;
}
Вот мой токен JWT:
Я получаю исключение:
IDX10500: Signature validation failed. Unable to resolve SecurityKeyIdentifier: 'SecurityKeyIdentifier
(
IsReadOnly = False,
Count = 2,
Clause[0] = X509ThumbprintKeyIdentifierClause(Hash = 0x818...),
Clause[1] = System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause
)
', ...
Даже если я установил ValidateIssuerSigningKey = false
.
Есть ли способ принять https://substrate.office.com/sts/
в качестве действующего эмитента?