当前位置: 首页 > 知识库问答 >
问题:

ASP.NET Identity 2.0签名不起作用

令狐增
2023-03-14
public static OAuthBearerAuthenticationOptions OAuthBearerOptions { get; private set; }

public void Configuration(IAppBuilder app)
{
    app.CreatePerOwinContext<IdentityDbContext<IdentityUser>>(HLAccountManager.CreateDbContext);
    app.CreatePerOwinContext<UserManager<IdentityUser>>(HLAccountManager.CreateUserManager);

    OAuthBearerOptions = new OAuthBearerAuthenticationOptions();

    app.UseOAuthBearerAuthentication(OAuthBearerOptions);
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login")
    });

    GlobalConfiguration.Configuration.SuppressDefaultHostAuthentication();
    GlobalConfiguration.Configuration.Filters.Add(new HostAuthenticationFilter("Bearer"));
}
[HttpPost]
[ActionName("Authenticate")]
[AllowAnonymous]
public String Authenticate(JObject data)
{
    dynamic json = data;
    string user = json.user;
    string password = json.password;

    if (string.IsNullOrEmpty(user) || string.IsNullOrEmpty(password))
        return "failed";

    var userIdentity = UserManager.FindAsync(user, password).Result;
    if (userIdentity != null)
    {
        var identity = new ClaimsIdentity(IdentityConfig.OAuthBearerOptions.AuthenticationType);
        identity.AddClaim(new Claim(ClaimTypes.Name, user));
        identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userIdentity.Id));
        AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
        var currentUtc = new SystemClock().UtcNow;
        ticket.Properties.IssuedUtc = currentUtc;
        ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));
        string AccessToken = IdentityConfig.OAuthBearerOptions.AccessTokenFormat.Protect(ticket);
        return AccessToken;
    }
    return "failed";
}

[HttpGet]
[Authorize]
[ActionName("Logout")]
public String Logout()
{
    var owinContext = HttpContext.Current.GetOwinContext();
    owinContext.Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie, DefaultAuthenticationTypes.ExternalBearer);

    return "OK";
}

Authenticate-method工作得很好。我的webapp从请求中获得一个令牌,我可以将其设置为授权头(例如,$HTTP用于angular apps)。随后对带[Authorize]注释的函数的调用将正确返回。但是,如果我调用Logout,它将正确返回“OK”字符串,但不会使令牌无效。如果我在调用Logout之后调用Authorize-method,我仍然得到一个正确的值,而不是预期的401-unauthorized。

  • 我看过这篇文章:ASP.NET标识注销,并尝试了不带参数的签名。这也不起作用。
  • HttpContext没有GetOwinContext。在我的情况下,它在HttpContext.Current中。我做错什么了吗?
  • 为什么我的注销方法不起作用?

共有1个答案

宫坚
2023-03-14

似乎我搞错了(承载)令牌的基本概念,这就是它不起作用的原因。我把这个留在这里,以防有人遇到同样的问题:

令牌不能被撤消或无效--至少在ASP.NET标识2.0中不能被撤消或无效。签名不适用于这些类型的身份验证。

解决这个问题的方法就是所谓的刷新令牌。Identity 2.0或OWIN中目前没有默认实现。但我发现了两篇博客文章,其中有一个解决方案

    null
 类似资料:
  • 问题内容: 问题: 我正在使用OpenSAML构建对发布到我们服务器上的SAML 2.0响应进行身份验证的方法。我已经完成了大部分工作,并能够访问断言的各个方面。唯一的问题是,当我尝试使用下面的公钥来验证签名时,它指出“ 签名未针对凭证的密钥进行验证 ”。 有任何想法吗? 公钥: 签名: 实现方式: 问题答案: 好吧,事实证明上面的代码 是 正确的。样本SAML响应不正确。我想从这一切中学到的教训

  • 给了我一个错误: javax.net.ssl.sslHandShakeException:Sun.Security.Validator.ValidatorException:PKIX路径构建失败:Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目标的有效证书路径

  • 我在macos上有IdentityServer4。Idv在本地主机上具有自签名证书。它一直有效,直到macos更新到蒙特利。无法使用Safari、Chrome和Firefox。Safari在空白页面上搜索,Chrome显示error ERR\u SSL\u PROTOCOL\u error。 该证书从6月份起一直有效,到蒙特利为止没有任何问题。 我试图做的是: 创建了密钥大小为4096的新证书。

  • HTML: CSS: 我刚刚有链接去谷歌现在。

  • 我正在使用Firebase Google登录。它可以通过USB调试完美地工作。但当我生成签名的APK时,它停止工作。无法登录。在Android5.1上使用它

  • 我有一个小的测试页面设置来测试我有的一个sprite表。中的每个sprite如下所示... 我的页面是这样的... null null 在循环过程中,我记录了类名,可以看到它的变化,并且这些名称对应于我的样式表中存在的类。和都在images文件夹中,并且images文件夹与我的页面位于同一目录中。 如果我只是从我的样式表中复制一个规则并将其直接放到我的页面上,并将名称替换为以进行测试,我就可以显示