ASP.NET MVC5/AngularJS/Web-API-app mithilfe der Windows-Authentifizierung und OWIN
Ich kann über die Dinge komplizieren, aber wir haben eine interne ASP.NET MVC5 SPA mit AngularJS mithilfe der Windows-Authentifizierung. Diese Anwendung hat eine SQL-back-end-Datenbank, die eine Tabelle mit Benutzern, die Ihre account-Namen und Ihre jeweiligen Rollen in der Anwendung. Wir werden die Anrufe an eine andere Web-API-Anwendung, die auch über Windows-Authentifizierung aktiviert ist.
Ich versucht habe zu tun Forschung auf, wie Autorisierung mit OWIN konnte aber nichts finden, alle spezifischen Beispiele in Bezug auf OWIN und Windows-Authentifizierung. Alles, was auftaucht, verwendet die forms-Authentifizierung mit einem Benutzernamen und Passwort.
Wie kann ich mich über die mit OWIN und Windows-Auth für meine app? Hier ist ein Beispiel meiner OAuthAuthorizationServerProvider Klasse.
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);
}
}
UPDATE:
Oops, ich habe vergessen, um mehr Informationen darüber, was möchten wir erreichen. Wenn möglich, würden wir gerne verwenden, Träger Authentifizierungs-tickets, so dass wir nicht haben, um die Benutzer und Ihre Rollen immer wenn wir einen Aufruf einer web-api-Methode.
UPDATE 2:
Auf Anfrage von Andrew, unten ist die TLDR-version von meinem _securityHelper Klasse, speziell die GetCurrentUser () - Methode. Sie werden bemerken, dass ich bin versucht zu rufen:
HttpContext.Current.GetOwinContext().Request.User.Identity.Name
Diese immer wieder null für Benutzer.
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;
}
}
InformationsquelleAutor der Frage mmoreno79 | 2014-11-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Artikel-Serie wäre ein guter Ort, um zu starten: http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/
ist zu beachten, wäre der folgende code, der im wesentlichen speichert die bearer-token im lokalen Speicher und legt es auf den Header. Es gibt offensichtlich eine Menge mehr als diese, einschließlich der Formen und die eigentliche server-Authentifizierung-system, aber dies sollte Ihnen einen ordentlichen start.
server-Komponente:
und die folgenden client-side-code:
zusammen mit
InformationsquelleAutor der Antwort Claies
Check-out dieser Artikel Schritte zum aktivieren der Windows-Authentifizierung in OWIN:
http://www.asp.net/aspnet/overview/owin-and-katana/enabling-windows-authentication-in-katana
Aus dem Artikel:
Dem verlinkten Artikel deckt aktivieren der Windows-Authentifizierung für die Entwicklung. Für Bereitstellungen, sind diese Einstellungen im IIS unter "Authentication". Benutzer werden aufgefordert, Ihren Benutzernamen und Ihr Passwort vom browser, wenn Sie ankommen, auf Ihre Anwendung Seite.
InformationsquelleAutor der Antwort davidmdem