.NET Web API 2 OWIN Porteur du Jeton d'Authentification

Je suis la mise en œuvre d'une API Web 2 le service de l'architecture dans mon .NET application web. Le client de consommer de la demande est un pur javascript, pas de mvc/asp.net. Je suis à l'aide d'OWIN pour essayer d'activer l'authentification par jeton par cet article OWIN Porteur du Jeton d'Authentification avec l'API Web de l'Échantillon. J'ai l'impression de manquer quelque chose avec l'étape d'authentification après son autorisation.

Mon login est:

    [HttpPost]
    [AllowAnonymous]
    [Route("api/account/login")]
    public HttpResponseMessage Login(LoginBindingModel login)
    {
        //todo: add auth
        if (login.UserName == "[email protected]" && login.Password == "a")
        {
            var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
            identity.AddClaim(new Claim(ClaimTypes.Name, login.UserName));

            AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
            var currentUtc = new SystemClock().UtcNow;
            ticket.Properties.IssuedUtc = currentUtc;
            ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));

            DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 

            return new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new ObjectContent<object>(new  
                { 
                    UserName = login.UserName,
                    AccessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket)
                }, Configuration.Formatters.JsonFormatter)
            };
        }

        return new HttpResponseMessage(HttpStatusCode.BadRequest);
    }

Il retourne

{
   accessToken: "TsJW9rh1ZgU9CjVWZd_3a855Gmjy6vbkit4yQ8EcBNU1-pSzNA_-_iLuKP3Uw88rSUmjQ7HotkLc78ADh3UHA3o7zd2Ne2PZilG4t3KdldjjO41GEQubG2NsM3ZBHW7uZI8VMDSGEce8rYuqj1XQbZzVv90zjOs4nFngCHHeN3PowR6cDUd8yr3VBLdZnXOYjiiuCF3_XlHGgrxUogkBSQ",
   userName: "[email protected]"
}

Alors j'essaie de définir l'en-tête HTTP Bearer sur les autres demandes dans AngularJS comme:

$http.defaults.headers.common.Bearer = response.accessToken;

à un API comme:

    [HttpGet]
    [Route("api/account/profile")]
    [Authorize]
    public HttpResponseMessage Profile()
    {
        return new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ObjectContent<object>(new
            {
                UserName = User.Identity.Name
            }, Configuration.Formatters.JsonFormatter)
        };
    }

mais peu importe ce que je fais ce service est "non autorisé". Suis-je manqué quelque chose?

  • Le lien de l'article que vous avez fournie montre une page avec la mention " Ce produit n'est pas encore publié.'. Je suis très intéressé par l'activation de l'api web de l'autorisation avec un porteur du jeton. Pouvez vous s'il vous plaît fournir des ressources ou une mise à jour du lien vers l'article que vous avez utilisé? Merci.
  • Salut, dans ton code je ne vois pas comment vous avez généré le jeton d'accès! Pourriez-vous préciser?
  • le fait automatiquement avec owin
  • Ok mais je ne vois pas où et comment vous avez défini et attribué une valeur à la variable accessToken
  • Je crois que c'est l'article ou l'article qui l'a remplacé: blogs.msdn.com/b/webdev/archive/2013/09/20/...
  • Salut, im traiter avec les mêmes choses mais avec MVC 4 à l'aide du Contrôleur (pas ApiController), mais presque la même chose et je ne sais pas comment créer un manuel authetnication. Parce que je ne peux pas utiliser l'Authentification par Formulaires, car Il va rediriger mon URL comme ASP.MVC n'. Aucun indice? Merci beaucoup
  • où obtenez-vous accessToken à partir de? dans la ligne. DefaultRequestHeaders.Autorisation = new AuthenticationHeaderValue("Porteur", accessToken);
  • J'ai écrit un résumé qui contient tout le code que j'ai utilisé pour mon application: gist.github.com/amcdnl/8239023
  • En fait, je cherchais sur "comment passer un porteur du jeton si vous vous connectez avec le classique MVC forme" et vous me donner la réponse! 🙂

InformationsquelleAutor amcdnl | 2013-11-04