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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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