У меня есть API C#
, который использует OWIN JWT для аутентификации.
Мой startup.cs
(моего сервера ресурсов) настраивает OAuth по коду:
public void ConfigureOAuth(IAppBuilder app)
{
var issuer = "<the_same_issuer_as_AuthenticationServer.Api>";
// Api controllers with an [Authorize] attribute will be validated with JWT
var audiences = DatabaseAccessLayer.GetAllowedAudiences(); // Gets a list of audience Ids, secrets, and names (although names are unused)
// List the
List<string> audienceId = new List<string>();
List<IIssuerSecurityTokenProvider> providers = new List<IIssuerSecurityTokenProvider>();
foreach (var aud in audiences) {
audienceId.Add(aud.ClientId);
providers.Add(new SymmetricKeyIssuerSecurityTokenProvider(issuer, TextEncodings.Base64Url.Decode(aud.ClientSecret)));
}
app.UseJwtBearerAuthentication(
new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = audienceId.ToArray(),
IssuerSecurityTokenProviders = providers.ToArray(),
Provider = new OAuthBearerAuthenticationProvider
{
OnValidateIdentity = context =>
{
context.Ticket.Identity.AddClaim(new System.Security.Claims.Claim("newCustomClaim", "newValue"));
return Task.FromResult<object>(null);
}
}
});
}
который позволяет проверять токены с предъявляемыми сертификатами на нескольких идентификаторах ClientID. Это хорошо работает.
Однако мое веб-приложение позволяет пользователю создавать новую аудиторию приложения (т.е. Новую комбинацию ClientID, ClientSecret и ClientName), но после этого я не знаю, как заставить сервер ресурсов JwtBearerAuthenticationOptions
распознавать вновь созданную аудиторию.
Я могу перезапустить сервер после новой аудитории, чтобы ConfigureOAuth()
повторил, но это не очень хороший подход в конечном итоге.
Кто-нибудь знает, как добавить аудиторию (то есть новую команду ClientID, ClientSecret и ClientName) в OWIN-приложение JwtBearerAuthenticationOptions
вне startup.cs и ConfigureOAuth()
? **
Я искал: https://docs.auth0.com/aspnetwebapi-owin-tutorial и http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/ для справки, но оба примера кода показывают ту же проблему, что описаны выше.