Ich habe IdentityServer3 lokal eingerichtet und alles funktioniert gut. Ich verwende JWT, um meine Benutzer zu autorisieren und erfolgreich auf meine Web-API-Controller zugreifen zu können (mit dem Attribut authorize).Setup IdentityServer3 in Azure
Wenn ich in Azure hochgeladen, obwohl ich ein Access-Token erhalten kann, aber wenn ich versuche, auf einen Controller zuzugreifen, erhalte ich einen Fehler 401. Ich gehe davon aus, dass dies mit dem Zertifikat zu tun hat. Meine Konfiguration sieht wie folgt aus:
public static class Config
{
/// <summary>
/// Configures identity server
/// </summary>
public static void ConfigureIdentityServer(this IAppBuilder app, CormarConfig config)
{
// Create our options
var identityServerOptions = new IdentityServerOptions
{
SiteName = "Cormar API",
SigningCertificate = LoadCertificate(),
IssuerUri = "https://localhost:44313",
// Not needed
LoggingOptions = new LoggingOptions
{
EnableHttpLogging = true,
EnableWebApiDiagnostics = true,
EnableKatanaLogging = true,
WebApiDiagnosticsIsVerbose = true
},
// In membory crap just to get going
Factory = new IdentityServerServiceFactory().Configure(config),
// Disable when live
EnableWelcomePage = true
};
// Setup our auth path
app.Map("/identity", idsrvApp =>
{
idsrvApp.UseIdentityServer(identityServerOptions);
});
}
/// <summary>
/// Configures the identity server to use token authentication
/// </summary>
public static void ConfigureIdentityServerTokenAuthentication(this IAppBuilder app, HttpConfiguration config)
{
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = "https://localhost:44313/identity",
ValidationMode = ValidationMode.ValidationEndpoint,
RequiredScopes = new[] { "api" }
});
AntiForgeryConfig.UniqueClaimTypeIdentifier = IdentityServer3.Core.Constants.ClaimTypes.Subject;
JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
}
/// <summary>
/// Loads the certificate
/// </summary>
/// <returns></returns>
private static X509Certificate2 LoadCertificate()
{
var certPath = $"{ AppDomain.CurrentDomain.BaseDirectory }App_Data\\idsrv3test.pfx";
return new X509Certificate2(certPath, "idsrv3test");
}
/// <summary>
/// Configure the identity service factory with custom services
/// </summary>
/// <returns></returns>
private static IdentityServerServiceFactory Configure(this IdentityServerServiceFactory factory, CormarConfig config)
{
var serviceOptions = new EntityFrameworkServiceOptions { ConnectionString = config.SqlConnectionString };
factory.RegisterOperationalServices(serviceOptions);
factory.RegisterConfigurationServices(serviceOptions);
factory.CorsPolicyService = new Registration<ICorsPolicyService>(new DefaultCorsPolicyService { AllowAll = true }); // Allow all domains to access authentication
factory.Register(new Registration<DbContext>(dr => dr.ResolveFromAutofacOwinLifetimeScope<DbContext>()));
factory.UserService = new Registration<IUserService>(dr => dr.ResolveFromAutofacOwinLifetimeScope<IUserService>());
factory.ClientStore = new Registration<IClientStore>(dr => dr.ResolveFromAutofacOwinLifetimeScope<IClientStore>());
factory.ScopeStore = new Registration<IScopeStore>(dr => dr.ResolveFromAutofacOwinLifetimeScope<IScopeStore>());
return factory;
}
}
Ich habe gelesen, und es sieht aus wie wenn ich Referenz-Token verwenden, ich habe nicht ein Zertifikat verwenden müssen, um sie zu unterschreiben. Also änderte ich meinen Klienten AccessTokenType Token zu verweisen und hinzugefügt, um das Geheimnis des api Umfang und ich konnte vor Ort meine geschützten Controller zugreifen, aber wieder, wenn ich auf azur drücken, bekomme ich immer noch ein 401.
Weiß jemand, wie ich dieses Problem lösen kann?
aber wenn in azurblau läuft, warum haben Sie localhost und port 44313? Und ist dieser Port in der Azure-Firewall geöffnet? (Website-Konfiguration)? – rmjoia
Sie können immer twittern [Dominick Baier] (https://twitter.com/leastprivilege) – rmjoia
@rmjoia der IssuerUri kann jederzeit geändert werden. Das ist nur der localhost beim Testen, aber das verursacht nicht das Problem Ich habe – r3plica