如何实现返回会话ID的WebApi方法?

时间:2015-10-21 07:46:14

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

我想为移动应用程序实现一个带有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方法来销毁会话,这在那里是不可能的。

1 个答案:

答案 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/