OWIN和带有SPA的WEB API 2的表单身份验证

mc

我有一个SPA JavaScript应用程序引用的Web API 2项目。

我正在使用OWIN对请求进行身份验证,并且使用Forms身份验证登录后,但是,在每次发送回服务器时,登录后我的资源都不会得到身份验证。

App_Start / WebApiConfig.cs

namespace API
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Configure Web API to use only bearer token authentication.
            config.SuppressDefaultHostAuthentication();
            config.Filters.Add(new HostAuthenticationFilter(Startup.OAuthBearerOptions.AuthenticationType));

            config.EnableCors(new EnableCorsAttribute(
                origins: "*", headers: "*", methods: "*"));

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            // Use camel case for JSON data.
            config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
                new CamelCasePropertyNamesContractResolver();
        }
    }
}

/Startup.cs

[assembly: OwinStartup(typeof(API.Startup))]

namespace API
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}

App_Start / Startup.Auth.cs

namespace API
{
    public partial class Startup
    {
        static Startup()
        {
            OAuthBearerOptions = new OAuthBearerAuthenticationOptions();
        }

        public static OAuthBearerAuthenticationOptions OAuthBearerOptions { get; private set; }

        public void ConfigureAuth(IAppBuilder app)
        {
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
            app.UseOAuthBearerAuthentication(OAuthBearerOptions);
        }
    }
}

Controllers / AccountController.cs

namespace API.Controllers
{
    public class AccountController : ApiController
    {

        public AccountController()
        {
            HttpContext.Current.Response.SuppressFormsAuthenticationRedirect = true;
        }

        [HttpPost]
        [AllowAnonymous]
        [Route("api/account/login")]
        [EnableCors(origins: "*", headers: "*", methods: "*", SupportsCredentials = true)]
        public HttpResponseMessage Login(LoginBindingModel login)
        {
            var authenticated = false;
            if (authenticated || (login.UserName == "a" && 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));

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

                FormsAuthentication.SetAuthCookie(login.UserName, true);

                return response;
            }

            return new HttpResponseMessage(HttpStatusCode.BadRequest);
        }

        [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)
            };
        }
    }
}

然后,我使用JavaScript调用它,例如:

       $httpProvider.defaults.withCredentials = true;

       login: function(user, success, error) {
            return $http.post('/api/account/login', user);
        },

        profile:function(){
            return $http.get('/api/account/profile');
        }

我的cookie是在浏览器上设置的:

ASPXAUTH 040E3B4141C86457CC0C6A10781CA1EFFF1A32833563563A6E7C0EF1D062ED9AF079811F1600F6573181B04FE3962F36CFF45F183378A3E23179E89D8D764C164B3993E23179E89D8D764C164FE

但登录后,进一步的请求将被视为未授权...

状态码:401未经授权

我觉得我真的很接近,只缺少一小块,有人有任何想法吗?

mc

发布时间太长,但在github gist上添加了有关如何设置此设置的所有详细信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OWIN和带有SPA的WEB API 2的表单身份验证

来自分类Dev

AngularJS和Web API表单身份验证

来自分类Dev

具有表单身份验证和角色的Web API

来自分类Dev

在令牌过期的情况下,表单身份验证和OAuth for Web API项目的混合不会返回401

来自分类Dev

如何通过控制台应用程序使用带有表单身份验证的Web API Restful Web服务?

来自分类Dev

ClaimsAuthenticationManager与IAuthenticationFilter与OWIN表单身份验证

来自分类Dev

Owin使用外部表单身份验证Cookie

来自分类Dev

使用B2C进行Web表单身份验证

来自分类Dev

如何在angularjs Web API SPA中使用现有的基于Web表单的身份验证和授权?

来自分类Dev

IIS会话超时和表单身份验证循环

来自分类Dev

桥接表单身份验证和OAUTH

来自分类Dev

HTML到PDF和表单身份验证

来自分类Dev

表单身份验证和Active Directory

来自分类Dev

HTML到PDF和表单身份验证

来自分类Dev

使用HTML客户端应用程序到ASP.Net Web API(MVC)进行表单身份验证

来自分类Dev

Sitecore 与 iis 表单身份验证和编码基本身份验证

来自分类Dev

如何在没有ASPNET身份的情况下使用OWIN表单身份验证

来自分类Dev

Web API 2,OWIN身份验证,注销未注销

来自分类Dev

Web API 2身份验证

来自分类Dev

带有OWIN的ASP.NET Web Api-自定义身份验证

来自分类Dev

Azure 简单身份验证 API

来自分类Dev

在基于OWIN的MVC 5中为多个Web应用设置表单身份验证

来自分类Dev

表单身份验证与OWIN UseCookieAuthentication和子域SSO

来自分类Dev

OWIN身份验证失败-Web API

来自分类Dev

具有表单身份验证的ASP.NET MVC和具有基本身份验证的WebApi

来自分类Dev

具有表单身份验证的ASP.NET MVC和具有基本身份验证的WebApi

来自分类Dev

发送带有明确的samesite = none的表单身份验证Cookie

来自分类Dev

Windows身份验证和ASP.NET MVC 4中的表单身份验证的混合

来自分类Dev

Windows Phone 8开发和WebAPI-通过表单身份验证进行身份验证吗?

Related 相关文章

  1. 1

    OWIN和带有SPA的WEB API 2的表单身份验证

  2. 2

    AngularJS和Web API表单身份验证

  3. 3

    具有表单身份验证和角色的Web API

  4. 4

    在令牌过期的情况下,表单身份验证和OAuth for Web API项目的混合不会返回401

  5. 5

    如何通过控制台应用程序使用带有表单身份验证的Web API Restful Web服务?

  6. 6

    ClaimsAuthenticationManager与IAuthenticationFilter与OWIN表单身份验证

  7. 7

    Owin使用外部表单身份验证Cookie

  8. 8

    使用B2C进行Web表单身份验证

  9. 9

    如何在angularjs Web API SPA中使用现有的基于Web表单的身份验证和授权?

  10. 10

    IIS会话超时和表单身份验证循环

  11. 11

    桥接表单身份验证和OAUTH

  12. 12

    HTML到PDF和表单身份验证

  13. 13

    表单身份验证和Active Directory

  14. 14

    HTML到PDF和表单身份验证

  15. 15

    使用HTML客户端应用程序到ASP.Net Web API(MVC)进行表单身份验证

  16. 16

    Sitecore 与 iis 表单身份验证和编码基本身份验证

  17. 17

    如何在没有ASPNET身份的情况下使用OWIN表单身份验证

  18. 18

    Web API 2,OWIN身份验证,注销未注销

  19. 19

    Web API 2身份验证

  20. 20

    带有OWIN的ASP.NET Web Api-自定义身份验证

  21. 21

    Azure 简单身份验证 API

  22. 22

    在基于OWIN的MVC 5中为多个Web应用设置表单身份验证

  23. 23

    表单身份验证与OWIN UseCookieAuthentication和子域SSO

  24. 24

    OWIN身份验证失败-Web API

  25. 25

    具有表单身份验证的ASP.NET MVC和具有基本身份验证的WebApi

  26. 26

    具有表单身份验证的ASP.NET MVC和具有基本身份验证的WebApi

  27. 27

    发送带有明确的samesite = none的表单身份验证Cookie

  28. 28

    Windows身份验证和ASP.NET MVC 4中的表单身份验证的混合

  29. 29

    Windows Phone 8开发和WebAPI-通过表单身份验证进行身份验证吗?

热门标签

归档