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
Vous devez vous connecter pour publier un commentaire.
Cet article de la série serait un bon endroit pour commencer: http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/
de la note, ce serait le code suivant, qui, essentiellement, les magasins le porteur du jeton dans le stockage local et l'attache pour les en-têtes. Il est évidemment beaucoup plus que cela, y compris les formulaires et le serveur d'authentification du système, mais cela devrait vous donner un début décent.
composant serveur:
et suivants du code côté client:
avec
Consultez cet article pour obtenir la procédure d'activation de l'Authentification Windows dans OWIN:
http://www.asp.net/aspnet/overview/owin-and-katana/enabling-windows-authentication-in-katana
De l'article:
L'article lié couvre l'activation de l'Authentification Windows pour le développement. Pour les déploiements, ces paramètres sont dans IIS en vertu de l'Authentification. Les utilisateurs seront invités à saisir leur nom d'utilisateur et le mot de passe par le navigateur lorsqu'ils arrivent sur votre page de l'application.