Connecter IdentityServer3 à une base de données
Bonjour,
J'essaie de mettre en place une infrastructure d'authentification IdentityServer3.
Je me suis essentiellement basé sur la doc officielle.
Avec beaucoup de mal, j'ai réussi pour l'instant à avoir les éléments suivants qui fonctionnent :
Une appli IdentityServer3
Application web MVC ASP.NET (.NET Framework)
Packages :
- Microsoft.Owin.Host.Systemweb
- IdentityServer3
Comme proposé dans le tutoriel, j'ai notamment une classe Users.cs contenant une méthode Get() qui génère une List<InMemoryUser> à des fins de démonstration :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public static class Users
{
public static List<InMemoryUser> Get()
{
return new List<InMemoryUser>
{
new InMemoryUser
{
Username="bob" ,
Password="secret",
Subject="1",
Claims = new[]
{
new Claim(Constants.ClaimTypes.GivenName, "TARTAMPION"),
new Claim(Constants.ClaimTypes.Role,"Gestionnaire"),
new Claim(Constants.ClaimTypes.Role,"Chef de service"),
new Claim(Constants.ClaimTypes.Role,"Utilisateur de base")
}
}
};
}
} |
Cette liste est récupérée par le Startup.cs lors de la définition du Factory dans les IdentityServerOptions :
Code:
1 2
| var factory = new IdentityServerServiceFactory();
factory.UseInMemoryUsers(Users.Get()); |
Une appli cliente
Application web ASP.NET (.NET Framework)
Packages :
- Microsoft.Owin
- Microsoft.Owin.Security.Cookies
- Microsoft.Owin.Security.OpenIdConnect
- Microsoft.Owin.Host.SystemWeb
Le Startup.cs de mon appli cliente est le suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| namespace EssaiAppliCliente
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Cookies"
});
var options = new OpenIdConnectAuthenticationOptions
{
Authority = "https://localhost:44365/identityServer", // Adresse du IdentityServer
ClientId = "EssaiAppliCliente", // Identifiant de l'application cliente lorsqu'elle se présente auprès de l'IdentityServer
RedirectUri = "https://localhost:44339/", // Adresse de redirection de l'appli cliente
ResponseType = "id_token",
SignInAsAuthenticationType = "Cookies",
Scope="openid roles"
};
app.UseOpenIdConnectAuthentication(options);
app.UseResourceAuthorization(new AuthorizationManager());
}
}
} |
Avec cette mini-infrastructure, j'arrive à protéger une action de contrôleur avec un [Authorize], voire un [Authorize(Role="xxx")].
Je souhaite maintenant passer à l'étape suivante : remplacer les InMemoryUser par des vrais utilisateurs issus de ma base de données SQL Server.
Malheureusement, je dois avouer que je suis un peu perdu. J'ai pas mal cherché, mais je ne trouve pas de documentation claire et simple, pas à pas, pour y parvenir.
Il semble qu'il soit nécessaire d'ajouter Asp.Net Identity, et de connecter tout ça je ne sais trop comment...
Quelqu'un a-t'il déjà fait ça avec succès ? Existe-t'il quelque part une documentation accessible ?
Je continue mes recherches de mon côté, je mettrai à jour ce topic si j'y arrive.
Merci