使用ASP.NET Web API 2和Owin的基于令牌的身份验证会抛出401未经授权

鸡巴

我已经使用Taiseer Joudeh的指南创建了OAuth身份验证我创建了一个端点/令牌来进行身份验证。它有效,并且我收到这样的结果。

{
  "access_token": "dhBvPjsHUoIs6k8NDsXfROpTq63qlww_7Bifl0LOzIxhZnngld0QCU-x4q4Qa7xWhhIQeQbbK6gYu_hLIYfUbsFMsdXwqlOqAYabJHNNsnJPMMHNADb-KCQznPQy7-waaqKMCVH1HPqx4L30sXlX0L8MbjtrtkX9-jxHaWdPapqYA9lU4Ai2-Z5-zXxoriFDL-SvxrUnBTDQMnRxOH_oEyclUngzW-is543TtJ0bysQ",
  "token_type": "bearer",
  "expires_in": 86399
}

但是,如果我在下一次调用具有AuthorizeAttribute的enpoint的标头中使用访问令牌,则我总是会收到未经授权的错误。另外,如果我查看当前线程的CurrentPrincipal中的内容,则它始终是GenericPrincipal。

我的Startup类看起来像这样(看起来与指南中的类似)

public class Startup
    {
        public void Configuration(IAppBuilder app)
        {

            HttpConfiguration config = new HttpConfiguration();
            IContainer container = AutoFacConfig.Register(config, app);

            ConfigureOAuth(app, container);

            WebApiConfig.Register(config);
            AutoMapperConfig.Register();

            app.UseWebApi(config);
        }
        public void ConfigureOAuth(IAppBuilder app, IContainer container)
        {
            OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
            {
                AllowInsecureHttp = true,
                TokenEndpointPath = new PathString("/token"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
                Provider = container.Resolve<IOAuthAuthorizationServerProvider>()                
            };

            // Token Generation
            app.UseOAuthAuthorizationServer(OAuthServerOptions);
            app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());

        }

    }

和OauthServiceprovider是这样的:

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
    {
        private readonly IUserBl userBl;


        public SimpleAuthorizationServerProvider(IUserBl userBl)
        {
            this.userBl = userBl;
        }

        public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
        {
            context.Validated();
        }

        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {

            context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

            UserDto user = Mapper.Map<UserDto>(userBl.Login(context.UserName, context.Password));

            if (user == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
            }

            var identity = new ClaimsIdentity(context.Options.AuthenticationType);
            identity.AddClaim(new Claim("sub", context.UserName));
            identity.AddClaim(new Claim("role", "user"));

            context.Validated(identity);

        }
    }

唯一的区别是,我使用的是owin的版本3,而不是指南中的2。是否有一些破坏性代码破坏了我的代码?

编辑1:

我正在使用Autofac来解析IOAuthAuthorizationServerProvider接口:

builder.RegisterType<SimpleAuthorizationServerProvider>()
                .As<IOAuthAuthorizationServerProvider>()
                .PropertiesAutowired() 
                .SingleInstance();
鸡巴

这个答案解决了我的问题https://stackoverflow.com/a/36769653/5441093

更改GrantResourceOwnerCredentials方法,以解决我的userbl类:

var autofacLifetimeScope = OwinContextExtensions.GetAutofacLifetimeScope(context.OwinContext);
var userBl = autofacLifetimeScope.Resolve<IUserBl>();

而不是使用autofac的注入感谢@taiseer joudeh提示来查看Autofac

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用ASP.NET Identity和ASP.NET Web API 2的基于跨域令牌的身份验证

来自分类Dev

使用基于ASP.NET身份令牌的身份验证在每个Web Api请求中授权声明

来自分类Dev

使用ASP.NET Web API进行的与身份验证和授权相关的疑问

来自分类Dev

ASP.NET MVC + Web API2 + AngularJS授权和身份验证

来自分类Dev

可以在ASP.NET Web API和SPA中使用基于cookie的身份验证吗?

来自分类Dev

使用Owin在Asp.Net Web Api中同时使用OAuth和基本身份验证

来自分类Dev

使用Windows身份验证和OWIN的ASP.NET MVC5 / AngularJS / Web API应用

来自分类Dev

ASP.NET MVC / Web Api通用授权和身份验证

来自分类Dev

ASP.NET WEB API 2 OWIN身份验证不受支持Grant_Type

来自分类Dev

使用ASP.Net MVC / Web API进行PayPal结帐-令牌身份验证问题

来自分类Dev

在ASP.NET MVC Web API服务和MVC客户端体系结构中实现身份验证和基于角色的授权

来自分类Dev

在ASP.NET Web API和Angle JS中使用的身份验证方法

来自分类Dev

ASP.NET MVC 5和WEB API使用相同的身份验证

来自分类Dev

ASP.NET Web API 2:如何使用外部身份验证服务登录?

来自分类Dev

使用ASP.NET Web API 2进行身份验证

来自分类Dev

使用 ASP.NET Web API 2 进行外部身份验证 - Microsoft 现在不工作

来自分类Dev

使用从 Angular 7 TS 到 .Net Owin 的 Web API 令牌身份验证时收到错误的密码

来自分类Dev

使用Restful asp.net Web API进行用户登录身份验证并保护API

来自分类Dev

如何在基于 cookie 身份验证的 asp.net mvc 项目中向 web api 添加令牌身份验证

来自分类Dev

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

来自分类Dev

如何使用Postman使用Cookie身份验证测试ASP.NET Core Web API?

来自分类Dev

ASP.NET 5中的Web API身份验证

来自分类Dev

ASP.NET JSON Web令牌“ 401未经授权”

来自分类Dev

针对Web和移动的ASP.NET Web API社交身份验证

来自分类Dev

带有身份验证令牌的提琴手multipart / form-data asp.net Web API 2

来自分类Dev

带有身份验证令牌的Fiddler multipart / form-data asp.net Web API 2

来自分类Dev

使用ASP.net API的承载令牌身份验证

来自分类Dev

使用 ASP.NET Core Web API 的 Facebook JWT 身份验证

来自分类Dev

角色与声明授权使用WIF和OWIN中间件的Asp.net Web API-2

Related 相关文章

  1. 1

    使用ASP.NET Identity和ASP.NET Web API 2的基于跨域令牌的身份验证

  2. 2

    使用基于ASP.NET身份令牌的身份验证在每个Web Api请求中授权声明

  3. 3

    使用ASP.NET Web API进行的与身份验证和授权相关的疑问

  4. 4

    ASP.NET MVC + Web API2 + AngularJS授权和身份验证

  5. 5

    可以在ASP.NET Web API和SPA中使用基于cookie的身份验证吗?

  6. 6

    使用Owin在Asp.Net Web Api中同时使用OAuth和基本身份验证

  7. 7

    使用Windows身份验证和OWIN的ASP.NET MVC5 / AngularJS / Web API应用

  8. 8

    ASP.NET MVC / Web Api通用授权和身份验证

  9. 9

    ASP.NET WEB API 2 OWIN身份验证不受支持Grant_Type

  10. 10

    使用ASP.Net MVC / Web API进行PayPal结帐-令牌身份验证问题

  11. 11

    在ASP.NET MVC Web API服务和MVC客户端体系结构中实现身份验证和基于角色的授权

  12. 12

    在ASP.NET Web API和Angle JS中使用的身份验证方法

  13. 13

    ASP.NET MVC 5和WEB API使用相同的身份验证

  14. 14

    ASP.NET Web API 2:如何使用外部身份验证服务登录?

  15. 15

    使用ASP.NET Web API 2进行身份验证

  16. 16

    使用 ASP.NET Web API 2 进行外部身份验证 - Microsoft 现在不工作

  17. 17

    使用从 Angular 7 TS 到 .Net Owin 的 Web API 令牌身份验证时收到错误的密码

  18. 18

    使用Restful asp.net Web API进行用户登录身份验证并保护API

  19. 19

    如何在基于 cookie 身份验证的 asp.net mvc 项目中向 web api 添加令牌身份验证

  20. 20

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

  21. 21

    如何使用Postman使用Cookie身份验证测试ASP.NET Core Web API?

  22. 22

    ASP.NET 5中的Web API身份验证

  23. 23

    ASP.NET JSON Web令牌“ 401未经授权”

  24. 24

    针对Web和移动的ASP.NET Web API社交身份验证

  25. 25

    带有身份验证令牌的提琴手multipart / form-data asp.net Web API 2

  26. 26

    带有身份验证令牌的Fiddler multipart / form-data asp.net Web API 2

  27. 27

    使用ASP.net API的承载令牌身份验证

  28. 28

    使用 ASP.NET Core Web API 的 Facebook JWT 身份验证

  29. 29

    角色与声明授权使用WIF和OWIN中间件的Asp.net Web API-2

热门标签

归档