Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Asp.net标识获取请求的身份验证失败_C#_Asp.net_Asp.net Web Api_Asp.net Identity_Owin - Fatal编程技术网

C# 使用Asp.net标识获取请求的身份验证失败

C# 使用Asp.net标识获取请求的身份验证失败,c#,asp.net,asp.net-web-api,asp.net-identity,owin,C#,Asp.net,Asp.net Web Api,Asp.net Identity,Owin,我有一个Api控制器,它为get请求返回一个图像。我想批准这个请求。所以我在action中添加了Authorize属性。我正在使用Asp.net Identity framework进行授权。当我运行应用程序时,我使用用户名/密码登录到应用程序,并通过ajax发送到/令牌。然后我获取访问令牌并存储它。问题是,当我引用带有src attrib(src指向上述api控制器)的图像标记时,我无法使用该标记发送访问令牌。我将如何实现这一点 public partial class Startup

我有一个Api控制器,它为get请求返回一个图像。我想批准这个请求。所以我在action中添加了Authorize属性。我正在使用Asp.net Identity framework进行授权。当我运行应用程序时,我使用用户名/密码登录到应用程序,并通过ajax发送到/令牌。然后我获取访问令牌并存储它。问题是,当我引用带有src attrib(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);
公共部分类启动
{
静态启动()
{
PublicClientId=“self”;
UserManagerFactory=()=>新的UserManager(新的UserStore(新的ImagePerfektDbContext());
OAuthOptions=新的OAuthAuthorizationServerOptions
{
TokenEndpointPath=新路径字符串(“/Token”),
Provider=新的ApplicationAuthProvider(PublicClientId,UserManagerFactory),
AuthorizeEndpointPath=新路径字符串(“/api/Account/ExternalLogin”),
AccessTokenExpireTimeSpan=TimeSpan.FromDays(14),
AllowInsecureHttp=true
};
}
公共静态OAuthAuthorizationServerOptions OAuthOptions{get;private set;}
公共静态函数UserManagerFactory{get;set;}
公共静态字符串PublicClientId{get;private set;}
public void ConfigureAuth(IAppBuilder应用程序)
{ 
app.UseCookieAuthentication(新的CookieAuthenticationOptions
{
AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,
LoginPath=新路径字符串(“/Account/Login”)
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
应用程序使用OAuthBealerTokens(OAuthOptions);

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

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

我希望这是有道理的


Leo

我们谈论的是MVC应用程序还是Web表单应用程序?我很困惑这是MVC 5应用程序Noo..我不打算在url中发送访问令牌。我想通过Cookie发送它(因为无法设置标头)。但正如我所见,[授权]attrib只识别头。问题是我想授权attrib通过cookiesWell进行身份验证。我提到的解决方案应该可以工作。我仍然不知道为什么必须使用授权筛选器,这显然不适用于这种情况。为什么不扩展它?为什么不覆盖授权筛选器以验证在身份验证中发送的访问令牌诱惑票?这不是一项大工作,应该在不到一个小时内就能让它工作。我在考虑是否有一种内置的方法来做到这一点,因为它的场景很明显。坦率地说,我从来没有遇到过这个问题,我相信授权过滤器是唯一一个与匿名过滤器一样的内置过滤器。基于此,我建议建议您实现my answer的解决方案或扩展授权筛选器。如果选择后者,请确保实现是线程安全的,以避免意外行为