Application API ASP.NET MVC5 / AngularJS / Web utilisant l'authentification Windows et OWIN

J'ai peut-être trop compliquer les choses, mais nous avons une ASP.NET MVC5 SPA avec AngularJS à l'aide de l'Authentification Windows. Cette application a un SQL base de données principale qui dispose d'une table d'utilisateurs, contenant leurs noms de compte, et de leurs rôles respectifs dans l'application. Nous allons faire des appels à un autre API Web application qui a également l'Authentification Windows est activé.

J'ai essayé de faire de la recherche sur la façon de gérer l'autorisation à l'aide de OWIN, mais je ne trouve pas d'exemples précis concernant OWIN et de l'Authentification Windows. Tout ce qui tourne utilise l'authentification par formulaires avec un nom d'utilisateur et mot de passe.

Comment puis-je aller sur l'aide de OWIN et de l'Authentification Windows pour mon application? Voici un échantillon de mes OAuthAuthorizationServerProvider classe.

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        context.Validated();
        return;
    }

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

        var container = UnityHelper.GetContainerInstance("***");
        var securityHelper = container.Resolve<ISecurityHelper>();

        User currentUser = securityHelper.GetCurrentUser(); //Validates user based on HttpContext.Current.User
        if (currentUser == null)
        {
            context.SetError("invalid_grant", "The user could not be found.");
            return;
        }

        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
        identity.AddClaim(new Claim("sub", currentUser.AccountName));
        identity.AddClaim(new Claim("role", "user"));

        context.Validated(identity);
    }
}

Mise à JOUR:
Oups, j'ai oublié d'inclure plus d'informations sur ce que nous aimerions accomplir. Si possible, nous aimerions utiliser porteur d'authentification des billets de sorte que nous n'avons pas à chercher à l'utilisateur et à leurs rôles à chaque fois que nous faisons un appel à une méthode de l'api web.

Mise à JOUR 2:
Comme demandé par Andrew, ci-dessous est la TLDR version de mon _securityHelper classe, plus précisément le GetCurrentUser() la méthode. Vous remarquerez que je suis d'essayer d'appeler:

HttpContext.Current.GetOwinContext().Request.User.Identity.Name

Cela renvoie toujours null pour l'Utilisateur.

public class SecurityHelper : ISecurityHelper
{
    private readonly ISecurityGroupController _securityGroupController;
    private readonly IUserController _userController;
    private readonly IEmployeeController _employeeController;
    private readonly IFieldPermissionController _fieldPermissionController;
    private readonly IOACController _oacController;

    public SecurityHelper(ISecurityGroupController securityGroupController,
        IUserController userController,
        IEmployeeController employeeController,
        IFieldPermissionController fieldPermissionController,
        IOACController oacController)
    {
        _securityGroupController = securityGroupController;
        _userController = userController;
        _employeeController = employeeController;
        _fieldPermissionController = fieldPermissionController;
        _oacController = oacController;
    }

    //... other methods

    public User GetCurrentUser()
    {
        User user = _userController.GetByAccountName(HttpContext.Current.GetOwinContext().Request.User.Identity.Name);
        if (user != null)
        {
            List<OAC> memberships = _oacController.GetMemberships(user.SourceId).ToList();
            if (IsTestModeEnabled() && ((user.OACMemberships != null && user.OACMemberships.Count == 0) || user.OACMemberships == null))
            {
                user.OACMemberships = memberships;
            }
            else if (!IsTestModeEnabled())
            {
                user.OACMemberships = memberships;
            }
        }

        return user;
    }
}

source d'informationauteur mmoreno79