我想为移动应用程序实现一个带有ASP.NET Identity的身份验证服务器。 但我不想使用默认的身份验证方法。 我想实现一个WebApi方法,它通过登录和密码为用户创建会话,并返回会话ID。因此,在移动应用程序中,我将为服务器的每个请求添加此会话ID作为json参数。
请举例说明如何实施? 我已经阅读了这篇文章http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/,但我还需要一个WebApi方法来销毁会话,这在那里是不可能的。
答案 0 :(得分:1)
首先: 您如何确保会话被“销毁”? 你不能确定。用户可能会失去与互联网的连接或硬关机他的设备。
现在,回答你的问题......有点: 你需要的是一个到期的令牌。这将确保用户在一段时间后退出。您可以通过相对较短的到期时间来完成此操作,然后确保只要用户使用密钥访问Web服务,我就会重置此时间。
Taiseer关于Bit of Tech的教程非常出色,用于理解Identity Framework和基于令牌的身份验证的基础知识。
Taiseer在Startup.cs中配置OAuth时设置访问令牌的到期时间:
public void ConfigureOAuth(IAppBuilder app)
{
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), //<---- Right here
Provider = new SimpleAuthorizationServerProvider()
};
// Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
您可以执行以下操作:
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30)
然后,您必须找到一种方法来在每次使用时刷新令牌生存期。目前我没有给你任何建议,但也许其他人也有。您可以通过覆盖AuthorizeAttribute来执行此操作。
Taiseer还有一个关于RefreshTokens的精彩指南,可能会派上用场: http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/