ASP.NET l'Identité dans une Web API
Je suis en train de travailler sur une application simple qui utilise la nouvelle ASP.NET d'Identité pour l'authentification. Depuis que j'ai l'intention d'avoir une application mobile dans l'avenir, j'ai placé l'authentification dans une Web API, je poste à partir de jQuery à partir d'un Rasoir de la Page Web (pas de MVC ou Formes). Jusqu'à présent, la poste fonctionne très bien et permet de créer des utilisateurs et enregistre - le sur l'API côté.
Cependant, je ne suis pas en mesure de déterminer comment procéder à partir de là. J'ai besoin de IsAuthenticated afin que je puisse servir les pages de droite, mais il renvoie toujours false. Puisque l'Identité est extrêmement nouveau, il y a très peu de documentation disponible pour elle et je ne suis pas en mesure de localiser quelque chose d'aussi complexe que de l'exécuter à partir d'une API Web.
Q: Quelle est la bonne façon de revenir à partir de l'authentification de l'Identité dans une API Web après la connexion de sorte que User.Identity.IsAuthenticated
obtient-elle correctement réglée?
De connexion.cshtml
@if (User.Identity.IsAuthenticated)
{
@RenderPage("/userpage.cshtml");
}
else
{
<form id="loginForm">
<b>Login</b>
<input type="email" placeholder="Email" name="email" id="loginEmail" />
<input type="password" placeholder="Password" name="password" id="loginPassword" />
<input type="submit" value="Log In"/>
</form>
}
<script>
$("#loginForm").submit(function(event)
{
event.preventDefault();
$.post("/api/login/",
{
Username: $('#loginEmail').val(),
Password: $('#loginPassword').val()
}, function ()
{
//???
}, "json");
return false;
});
</script>
Login API Web
public class LoginController : ApiController
{
public async void Post(UserInfo info)
{
var manager = new AuthenticationIdentityManager(new IdentityStore());
var result = await manager.Authentication.CheckPasswordAndSignInAsync(HttpContext.Current.GetOwinContext().Authentication, info.Username, info.Password, true);
if (result.Success)
{
//???
}
}
}
J'ai en effet été l'apprentissage de l'échantillon afin d'obtenir autant que j'ai. Cependant, l'échantillon est en MVC et utilise une redirection post de connexion, ce qui, à mon sens actuel, n'est pas possible dans une API Web parce que c'est un RESTE de l'opération. L'échantillon, pour autant que je peux dire à partir de la version que j'ai il y a quelques jours, ne permet pas de couvrir l'API Web.
pls voir Darin réponse: stackoverflow.com/questions/11014953/...
OriginalL'auteur Dragonseer | 2013-10-11
Vous devez vous connecter pour publier un commentaire.
Cela dépend de la méthode d'authentification que vous utilisez. La plupart des applications web utiliser le Formulaire (Cookie) module d'authentification comme principale méthode d'authentification. Il devrait fonctionner correctement avec vos pages web, mais ce n'est pas le meilleur choix si vous voulez travailler avec votre API sur le native client comme une application mobile. Vous devez être prudent avec attaque CSRF lors de l'activation de l'authentification par cookie avec l'api web.
En supposant que vous utilisez l'authentification par cookie, il vous reste deux choix. On est FormsAuthentication module IIS, ce qui est assez vieux, vous devez utiliser FormsAuthentication.SetAuthCookie pour se connecter l'utilisateur.
L'autre façon est OWIN cookie middleware, qui est utilisée par défaut MVC 5 modèle pour prendre en charge l'authentification. Veuillez vérifier ma réponse sur la connexion de l'utilisateur par OWIN API
Si vous voulez avoir une meilleure authentification de l'histoire de l'API web avec une application mobile, je vous suggère d'utiliser le OWIN OAuth middleware pour permettre au porteur du jeton comme principale méthode d'authentification pour l'api web. Dans MVC 5 SPA modèle, il témoigne d'un bon modèle à utiliser en combinaison avec MVC et cookie d'authentification. Mon blog Comprendre les Fonctionnalités de Sécurité dans le SPA de Modèle pour VS2013 RC devrait donner une idée générale sur la façon dont ils travaillent ensemble.
L'identité de cadre a une OWIN paquet qui implémente la plupart des OWIN code d'authentification. Si vous n'avez pas besoin de mettre en place votre propre. Pourquoi ne pas l'utiliser?
peut OWIN l'authentification de l'ajouter à une application web à l'aide de DotNetOpenAuth?
Your answer
ne réponds pas vraiment à la question....que l'un est pour les connexions externes. Si nous ne voulons pas d'utiliser des connexions?OriginalL'auteur Hongye Sun
Construction de Le hongye Soleil est de la réponse, la bonne méthode est d'utiliser OWIN cookie middleware pour transférer et stocker des cookies sur. La bonne façon de le faire est par l'ajout d'un Démarrage.cs à la racine du projet et avec le contenu suivant (ce qui est disponible dans les modèles proposés dans VS). L'API Web de réponse enverra automatiquement sur le cookie.
Voir le hongye Soleil, la réponse à cette question pour une explication complète avec plus de détails, y compris l'authentification externe.
app.UseSignInCookies();
n'était pas une méthode...OriginalL'auteur Dragonseer