【问题标题】:Authentication fails for get request using Asp.net Identity使用 Asp.net Identity 获取请求的身份验证失败
【发布时间】:2013-12-15 03:43:37
【问题描述】:

我有一个 Api 控制器,它为获取请求返回图像。我想授权这个请求。所以我将 Authorize 属性添加到操作中。我正在使用 Asp.net Identity 框架进行授权。当我运行我的应用程序时,我使用通过 ajax 发送到 /Token 的用户名/密码登录到应用程序。然后我得到 access_token 并存储它。问题是当我使用 src 属性(该 src 指向上述 api 控制器)引用图像标签时,我没有办法用它发送访问令牌。我将如何实现?

    public partial class Startup
{
    static Startup()
    {
        PublicClientId = "self"; 
        UserManagerFactory = () => new UserManager<User>(new UserStore<User>(new ImagePerfektDbContext())); 
        OAuthOptions = new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/Token"),
            Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
            AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
            AllowInsecureHttp = true
        };
    }

    public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; }

    public static Func<UserManager<User>> UserManagerFactory { get; set; }

    public static string PublicClientId { get; private set; } 
    public void ConfigureAuth(IAppBuilder app)
    { 
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login")
        });
        app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie); 
        app.UseOAuthBearerTokens(OAuthOptions);

【问题讨论】:

  • 我们谈论的是 MVC 应用程序还是 Web 表单应用程序?我很困惑
  • 这是一个 MVC 5 应用程序

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


【解决方案1】:

我明白你的意思。在 src 属性 URL 中附加访问令牌作为路由参数也不是一个好主意。

我会做什么...假设您将访问令牌存储在身份验证票证中,我将使用“匿名”操作过滤器标记操作方法并删除“授权”操作过滤器。然后,在操作方法代码中,我将尝试从身份验证票证(或存储它的任何地方)检索访问令牌,对其进行验证,最后根据验证是否成功返回图像。

我希望它有意义

狮子座

【讨论】:

  • noo.. 我不打算在 url 中发送访问令牌。我想通过 cookie 发送它(因为无法设置标题)。但正如我所见,[Authorize] 属性只识别标题。问题是我想通过cookies授权attrib到authorze
  • 嗯,我提到的解决方案应该有效。我仍然不知道为什么您必须使用 Authorize 过滤器,这显然不适用于这种情况。为什么不延长它?为什么不覆盖授权过滤器来验证身份验证票中发送的访问令牌?这不是一项大工作,应该在不到一个小时的时间内完成
  • 我在想是否有内置的方法可以做到这一点,因为它的场景很明显。
  • 坦率地说,我从来没有遇到过这个问题,我相信授权过滤器是唯一的内置过滤器和匿名过滤器。基于此,我建议您实施我的答案的解决方案或扩展授权过滤器。如果您选择后者,请确保实现是线程安全的以避免意外行为
猜你喜欢
  • 1970-01-01
  • 2010-10-20
  • 2021-11-23
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
相关资源
最近更新 更多