【问题标题】:How do you reject a Katana Bearer token's identity您如何拒绝 Katana Bearer 令牌的身份
【发布时间】:2013-10-23 21:52:50
【问题描述】:

如何拒绝身份?我的类继承自 OAuthBearerAuthenticationProvider 并且我覆盖了 ValidateIdentity?

我已经尝试设置 context.Rejected();或 context.SetError();并抛出异常,但我的控制器仍然被调用。 OAuthBearerAuthenticationHandler 确实调用了我的类,所以我知道我的设置正确。

我当前的失败代码

        public void ConfigureAuth ( IAppBuilder app )
        {
            // Enable the application to use a cookie to store information for the signed in user
            // and to use a cookie to temporarily store information about a user logging in with a third party login provider
            app.UseCookieAuthentication(new CookieAuthenticationOptions());
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            // Enable the application to use bearer tokens to authenticate users
            app.UseOAuthBearerAuthentication ( new OAuthBearerAuthenticationOptions ()
            {
                Provider = new OAuthBearerAuthenticationProvider ()
                {
                    OnValidateIdentity = async ctx => { ctx.Rejected (); }
                }
            } );
            app.UseOAuthBearerTokens(OAuthOptions);
}

【问题讨论】:

  • 你的 Action Method 有 Authorize 属性吗?记住授权中间件提供了分配 ClaimsIdentity 的服务。
  • 是的,我可以逐步通过授权过滤器,它的 OAuthBearerAuthenticationHandler 似乎不起作用。或者它的调用者忽略了它返回 null 的事实。
  • 您是否到达分配了 AuthorizeAttribute 的控制器方法?如果返回值为 null,则 ClaimsIdentity 不会分配给当前用户。所以它就像匿名一样。
  • 它通过授权过滤器并将声明身份分配给原则。控制流在调试器中很难遵循,因为它是异步代码。但我认为 OAuthBearerAuthenticationHandler 通过引用传递上下文,这在 awit 处理程序上不起作用?

标签: c# asp.net-web-api owin katana


【解决方案1】:

我无法重现该问题。您能否检查一下您的 OnValidateIdentity 实现是否相同?

        OAuthBearerOptions = new OAuthBearerAuthenticationOptions()
        {
            Provider = new OAuthBearerAuthenticationProvider
            {
                OnValidateIdentity = async ctx =>
                    {
                        ctx.Rejected();
                    }
            }
        };

【讨论】:

  • 奇怪的是,这只是使用个人 id 的普通视觉工作室 webapi 模板。然而,我使用与您相同的代码,并从“值”控制器获取值。
  • 如果我只使用 app.UseOAuthBearerAuthentication... 这似乎有效...但如果我也有 app.UseOAuthBearerTokens 那么其他东西正在处理令牌的有效性并覆盖我的设置?
  • UseOAuthBearerTokens 会将 Bearer 认证中间件和授权服务器中间件注册到管道中。如果你同时调用这两个方法,你将注册两个 Bearer auth 中间件。您只需要调用 UseOAuthAuthorizationServer 来注册授权服务器。
  • @HongyeSun:你知道这是在哪里记录的吗?我一直在反编译 Identity 以得出这些结论,但我还有其他类似的问题,这显然不是解决问题的正确方法。我主要可以找到代码示例,但没有明确解释 Identity OWIN 扩展如何与通用 OAuth 中间件组件相匹配。似乎每个人都在使用模板而不知道发生了什么(尽管我希望我只是在某个地方错过了一个明显的文档)。
猜你喜欢
  • 1970-01-01
  • 2020-10-15
  • 2017-10-30
  • 2017-12-15
  • 2018-08-29
  • 2013-11-25
  • 2019-07-19
  • 2014-07-06
相关资源
最近更新 更多