Kontext: Ich verwende ASP.NET MVC mit OWIN-Self-Host. Im Folgenden finden Sie den Rest der Konfigurationen/Setup.IdentityServer3: Einige Ansprüche werden nicht vom Identitätsserver zurückgegeben
In meinem -Client s in Identitätsserver (man beachte die AllowedScopes set):
public static class InMemoryClientSource
{
public static List<Client> GetClientList()
{
return new List<Client>()
{
new Client()
{
ClientName = "Admin website",
ClientId = "admin",
Enabled = true,
Flow = Flows.Hybrid,
ClientSecrets = new List<Secret>()
{
new Secret("admin".Sha256())
},
RedirectUris = new List<string>()
{
"https://admin.localhost.com/"
},
PostLogoutRedirectUris = new List<string>()
{
"https://admin.localhost.com/"
},
AllowedScopes = new List<string> {
Constants.StandardScopes.OpenId,
Constants.StandardScopes.Profile,
Constants.StandardScopes.Email,
Constants.StandardScopes.Roles
}
}
};
}
}
Hier sind die Scopes:
public static class InMemoryScopeSource
{
public static List<Scope> GetScopeList()
{
var scopes = new List<Scope>();
scopes.Add(StandardScopes.OpenId);
scopes.Add(StandardScopes.Profile);
scopes.Add(StandardScopes.Email);
scopes.Add(StandardScopes.Roles);
return scopes.ToList();
}
}
Im Identity Server, Hier ist, wie der Server konfiguriert ist. (Beachten Sie den Clients und Scopes sind die, die oben angegeben):
var userService = new UsersService(.... repository passed here ....);
var factory = new IdentityServerServiceFactory()
.UseInMemoryClients(InMemoryClientSource.GetClientList())
.UseInMemoryScopes(InMemoryScopeSource.GetScopeList());
factory.UserService = new Registration<IUserService>(resolver => userService);
var options = new IdentityServerOptions()
{
Factory = factory,
SigningCertificate = Certificates.Load(), // certificates blah blah
SiteName = "Identity"
};
app.UseIdentityServer(options);
schließlich auf der Client-Web-Anwendung Seite, das ist, wie Auth eingerichtet ist:
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
AuthenticationType = "Cookies"
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions()
{
Authority = "https://id.localhost.com",
ClientId = "admin",
RedirectUri = "https://admin.localhost.com/",
PostLogoutRedirectUri = "https://admin.localhost.com/",
ResponseType = "code id_token token",
Scope = "openid profile email roles",
ClientSecret = "admin",
SignInAsAuthenticationType = "Cookies"
});
Ich habe eine benutzerdefinierte Klasse für IUserService implementiert:
Wie Sie sehen, sind die Ansprüche in dieser Zeile übergeben:
context.AuthenticateResult = new AuthenticateResult(user.Id.ToString(), user.EmailAddress, claims);
Als ich in zu IdentityServer3 versuchen anmelden, kann ich erfolgreich an die Client-Web-Anwendung anmelden. JEDOCH, wenn ich die Benutzeransprüche bekomme, sehe ich keine Identitätsansprüche. No Vorname, Familienname und E-Mail Ansprüche. Screenshot unten:
Alles, was ich vielleicht verpasst haben? Danke im Voraus!
Ihre Konfiguration sieht gut aus. Dumm ich weiß, aber sind Sie sicher, dass der authentifizierte Benutzer diese Ansprüche hat? –
Hey @ScottBrady, ich nehme an, sie haben bereits, weil ich diese Ansprüche auf den Kontext hinzugefügt habe.AuthenticateResult (wie Sie im obigen Beispielcode für die benutzerdefinierte UsersService-Implementierung sehen). – jerbersoft