使用Asp.net Identity对get请求进行身份验证失败

时间:2013-12-15 03:43:37

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

我有一个Api控制器,它返回一个获取请求的图像。我想授权这个请求。所以我将Authorize属性添加到了操作中。我正在使用Asp.net Identity框架进行授权。当我运行我的应用程序时,我使用用户名/密码通过ajax发送到/ Token登录到应用程序。然后我得到access_token并存储它。问题是当我用src attrib引用一个Image标签时(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);

1 个答案:

答案 0 :(得分:1)

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

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

我希望它有意义

利奥