Comment utiliser L'authentification Servicestack avec L'authentification Active Directory/Windows?

je crée une fonction publique sécurisée (SSL) où les justificatifs d'identité des utilisateurs résident dans Active Directory. Je veux tirer parti de L'authentification de ServiceStack et ai lu sur le article wiki. J'ai déjà le code écrit pour vérifier les informations d'identification de l'utilisateur avec AD. J'ai quelques questions.

  1. quel fournisseur D'autorisation dois-je utiliser? Justificatifs D'identité, autorisation de base ou sur mesure? Le service nécessite SSL donc L'Auth de base serait sûr, mais les mots de passe seraient cryptés pour être ajoutés sécurité.
  2. ai-je encore besoin de stocker L'UserAuth et de mettre en cache L'AuthUserSession?
  3. le client monotouch supportera-t-il l'authentification?

mise à jour 2: j'ai finalement créé un service de test SS qui s'est intégré à la publicité, en utilisant Credentialauthprovider. Cependant mon but ultime est d'avoir un site qui est une api lorsque les clients l'appellent. Donc en gros un site SS MVC.

mise à Jour:

d'après ce que j'ai compris, après avoir fait d'autres recherches, SS envisage de faire un produit commercial qui pourrait prendre en charge L'authentification Windows à l'avenir. Je l'ai lu dans un commentaire de mythz sur le groupe Google SS. La raison pour laquelle j'ai posé cette question Est que mon entreprise construit des applications internes en utilisant IWA et l'adoption SS MVC est difficile sans IWA. Je pense que j'ai lu que vous pourriez héberger le site SS MVC ASP.NET site qui utilise IWA mais je n'ai pas encore essayé cela.

25
demandé sur BrandonG 2012-10-25 22:14:27
la source

2 ответов

J'ai aussi branché ServiceStack avec L'authentification intégrée de Windows (pour une application d'entreprise), et la clé était de ne pas essayer de l'intégrer entièrement avec les Authprovider de ServiceStack, puisque L'approche générale D'IWA ne traite pas des justificatifs d'identité dans votre code d'application -- c'est géré par le serveur web. Ce que j'ai fait:

  1. configurer le site / l'application dans IIS de façon à ce que L'authentification Windows soit la seule option activée. (Sans accès Anonyme permettre.) Cela signifie que L'IIS lui-même s'occupera de la séquence challenge-response (HTTP 401/200) avec les utilisateurs non authentifiés, et s'occupera de la partie authentification du processus pour vous.

  2. mise en Œuvre ServiceStack IHasRequestFilter (un filtre de pré-requête HTTP) comme attribut (par exemple, [administrateur]). La méthode RequestFilter de ce filtre récupère le nom d'utilisateur courant à partir de HttpContext (HttpContext.User.Identity.Name), cherche depuis un dépôt (qui pourrait être une base de données SQL, un fichier plat, etc.), cache les résultats à l'aide ServiceStack ICacheClient (mémoire cache, Redis,etc.), et lance un 403 HttpError s'il n'est pas autorisé.

avec ceci fait, tout ce qui était nécessaire était d'ajouter l'attribut aux classes ou aux méthodes où désiré (qui obtient cette Authentification/autorisation dans le pipeline de service où désiré), et enregistrer mon fournisseur de cache désiré dans mon implémentation AppHost, par exemple:

 container.Register<ICacheClient>(new MemoryCacheClient() { FlushOnDispose = false });

ça marche très bien.

5
répondu Nick Jones 2013-05-14 23:26:39
la source

voici ce qu'a dit Demis Bellot sur twitter. Probablement possible mais nécessite plus de recherche.

pas quelque chose que j'ai enquêté, ne fonctionne pas dans le Win / Active Répertoire plus. Nécessite un peu de R&D pour trouver/résoudre le problème

j'ai finalement obtenu un prototype de service travaillant avec la publicité. J'ai mis en œuvre le logiciel CredentialsAuthProvider. Maintenant ce n'est pas lié à ASP.NET IWA du tout, mais ne vérifie facilement pour voir si l'utilisateur est dans la publicité. Espérons-le cela pourrait aider quelqu'un.

public class LDAPAuthProvider : CredentialsAuthProvider
{
    public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
                    {
                        //Check to see if the username/password combo is valid, an exception will be thrown if the username or password is wrong
                        try
                        {
                            DirectoryEntry entry = new DirectoryEntry(ConfigurationManager.AppSettings["TargetOU"], userName, password);
                            object nativeObject = entry.NativeObject;
                        }
                        catch (Exception)
                        {
                            //This means the username/password combo failed
                            return false;
                        }

                        return true;
                    }
}
5
répondu BrandonG 2013-04-29 20:59:48
la source