Токен-носитель jwtBearer с обновлением rc-1 для ASP.Net 5
У меня много проблем с тем, чтобы мое веб-приложение asp.net 5 могло принимать JWT tokens
, У меня есть код, уже полностью работоспособный с использованием mvc5, и я просто хочу, чтобы некоторая помощь по преобразованию этого кода была идентична, но работа с mvc6 Он настроен так, что мой клиент (веб-сайт) является доверенным приложением и использует IssuerSigningToken
проверить статус доверенного приложения, и после этого я могу просто передать JWT tokens
и получить информацию о пользователе и претензиях с сервера авторизации.
старый код:
public void Configuration(IAppBuilder app)
{
HttpConfiguration httpConfig = new HttpConfiguration();
app.UseJwtBearerAuthentication(new MyJwtOptions());
app.UseWebApi(httpConfig);
ConfigureWebApi(httpConfig);
app.UseWebApi(httpConfig);
}
public class MyJwtOptions : JwtBearerAuthenticationOptions
{
public MyJwtOptions()
{
var issuer = "https://tv.domain.com/trust/domain";
var audience = "https://www.domain.com/";
var key = Convert.FromBase64String("dW8E7DDKW34DDW33jg=");
AllowedAudiences = new[] {audience};
IssuerSecurityTokenProviders = new[] {new SymmetricKeyIssuerSecurityTokenProvider(issuer, key)};
}
}
Лучший пример, который я могу найти, - это здесь - JwtBearerSample
app.UseJwtBearerAuthentication(options =>
{
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
// You also need to update /wwwroot/app/scripts/app.js
options.Authority = Configuration["jwt:authority"];
options.Audience = Configuration["jwt:audience"];
});
Я не могу понять, если я близко или нет, моя главная проблема заключается в том, как добавить IssuerSignerToken
? я использую Thinktecture
и не похоже, что у них есть новый обновленный пример. Кто-нибудь выполнил то, что я пытаюсь сделать? Я знаю, что есть несколько других подобных вопросов, но ответы на них используют X.509 Certificates
Я бы предпочел, если возможно, использовать тот же строковый ключ для IssuerSignerToken
ОБНОВИТЬ
моя проблема в том, какие опции я использовал, унаследованные от Microsoft.Owin.Security.JwtBearerAuthenticationOptions
новый код ожидает Microsoft.AspNet.Authentication.JwtBearer.JwtBearerOptions
3 ответа
Чтобы использовать симметричный ключ, вам нужно перейти на ночные сборки RC2 (изначально он не будет работать с RC1).
Вот как вы можете указать ключ эмитента, необходимый для проверки токенов JWT (вам не нужно создавать подклассы JwtBearerOptions
или же JwtBearerAuthenticationOptions
для этого):
var key = Convert.FromBase64String("dW8E7DDKW34DDW33jg=");
app.UseJwtBearerAuthentication(options => {
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.Authority = Configuration["jwt:authority"];
options.Audience = Configuration["jwt:audience"];
options.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey(key);
});
Ответ Пинпойнта совершенно верный, хотя я подумал, что мог бы добавить к этому и избежать многих часов неприятных проблем, заставляя это работать.
не устанавливайте ничего в собственность Authority
// even if everything else is properly set you will get 500
// some demos tell you to put CLientId here , that is wrong
options.Authority = "";
вы не можете устанавливать конфигурации напрямую, вы должны создать новый объект конфигурации следующим образом:
options.Configuration = new Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfiguration()
{
Issuer = "https://tv.domain.com/trust/domain"
};
в MVC5 вы бы использовали System.Security.Claims
в вашем контроллере, чтобы получить текущего пользователя так:
var user = ClaimsPrincipal.Current;
это больше не будет работать, теперь вы добавите это в контроллер:
var user = User.Identity;
Вы можете использовать это так:
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = clientIds,
IssuerSecurityKeyProviders = new IIssuerSecurityKeyProvider[]
{
new SymmetricKeyIssuerSecurityKeyProvider(issuer, key)
}
});