相关疑难解决方法(0)

OWIN - Authentication.SignOut()似乎不会删除cookie

我在OWIN Cookie身份验证方面遇到了一些问题.我有一个.Net站点,其中有一些MVC页面使用cookie身份验证和受承载令牌保护的WebAPI资源.

当我退出时,我删除了客户端上的访问令牌,因此后续的API请求将不会在标头中包含令牌,因此将无法通过身份验证.这部分很好.

以同样的方式,我也希望注销以删除MVC页面使用的cookie.我在服务器上执行了以下操作:

    [Route("Logout")]
    public IHttpActionResult Logout()
    {
        var ctx = Request.GetOwinContext();
        var authenticationManager = ctx.Authentication;
        authenticationManager.SignOut();
        return Ok();
    }
Run Code Online (Sandbox Code Playgroud)

但是,在调用Logout之后,我仍然可以访问受保护的MVC页面,即使这个cookie本应被Logout调用删除了.

看起来很简单,所以我可能错过了一些东西.

谢谢,

authentication cookies model-view-controller owin

33
推荐指数
2
解决办法
4万
查看次数

HttpContext.Current.Session为null + OWIN

我是OWIN的新手,这个问题一直是我的主要障碍.

基本上,在我的MVC应用程序中,我在Startup类中有以下内容:

public partial class Startup
{
    public void ConfigureAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
        app.UseCookieAuthentication(new CookieAuthenticationOptions());
        app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
                {
                    ClientId = OfficeSettings.ClientId,
                    Authority = OfficeSettings.Authority,

                    TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters()
                    {
                        RoleClaimType = "roles"
                    },

                    Notifications = new OpenIdConnectAuthenticationNotifications()
                    {

                    AuthorizationCodeReceived = (context) =>
                        {
                        // code hidden for readability

                            if(HttpContext.Current.Session == null)
                            {
                                // It's null. Why is that?
                            }

                            var session = HttpContext.Current.Session;
                            if (session["myMockSession"] != null)
                            {
                                // Do stuff...
                            }
                        },

                        RedirectToIdentityProvider = (context) =>
                        {
                            // …
Run Code Online (Sandbox Code Playgroud)

asp.net authentication session owin

10
推荐指数
1
解决办法
5309
查看次数

如何使用Owin托管存储会话数据?

我在使用Owin托管的应用程序中创建会话时遇到问题.我尝试过使用RedisSession,但我不知道如何配置它所以它给了我一个错误.我找了一段时间的解决方案,尝试了不同的东西,最后决定在这里寻求帮助.

场景:

  • 我正在使用HTTP POST请求登录应用程序,
  • 用户登录名和密码应存储在会话中,
  • 对于每个需要先前登录会话的下一个GET/POST请求为空(登录名和密码为空).

对象HTTPContext是空的.

我正在使用Ninject进行依赖注入.

我尝试过类似的东西:OWIN中间件可以使用http会话吗?

有没有人知道如何在Owin会话中存储登录数据?

下面是Owin配置文件,其中包含的东西都来自上面发布的链接.

[assembly: OwinStartup(typeof(Service.Startup))]
namespace Service
{
public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            var config = new HttpConfiguration();
            config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{action}/{id}", new { id = RouteParameter.Optional }
                );
            appBuilder.RequireAspNetSession();
            appBuilder.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(config);

        }

        public static StandardKernel CreateKernel()
        {
            var kernel = new StandardKernel(new Module());
            return kernel;
        }
    }
    public static class AspNetSessionExtensions
    {
        public static IAppBuilder RequireAspNetSession(this IAppBuilder app)
        {
            app.Use((context, next) =>
            {
                // Depending …
Run Code Online (Sandbox Code Playgroud)

c# session middleware httpcontext owin

8
推荐指数
1
解决办法
1925
查看次数