ehwash Ответов: 0

OWIN производит различное поведение между IIS express и IIS


Я создаю приложение для аутентификации с помощью OWIN. Я пытаюсь получить как токен медведя, так и утверждения userinfo. Приведенный ниже код дает мне 85% того, что я хочу. При первоначальном написании кода я использовал IIS Express. Я отлажено и закодированы по отношению к этой среде. По какой-либо причине после первоначального вызова вызова в блоке else запрос.isauthenticated становится ложным после возврата с экрана входа в систему (используя KeyCloak в качестве idp). Затем код сбрасывает пользователя в блок else if, где я нахожу запрос.форма имеет мой знак на предъявителя. Затем я должен снова выполнить authentication.challenge (экран входа в систему KeyCloak не открывается), и я возвращаюсь в верхнюю часть page_load, и на этот раз request.isauthenticated истинен, и я могу получить userinfo, но запрос.форма пуста. Это находка для меня, потому что я могу хранить всю информацию где - то для последующего использования.

Как только я добрался до этой точки я нацелился сервер IIS Запустил код и получил другое поведение. Код изначально попадает в блок else (так же, как и раньше) Я вошел в систему, но по возвращении из idp на этот раз запрос.isAuthenticated истинен. У меня есть userinfo, но нет токена на предъявителя. Есть идеи, почему??

Что я уже пробовал:

protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.IsAuthenticated)
        {
            String str = String.Empty;

            var qry = ((System.Security.Claims.ClaimsPrincipal)Request.RequestContext.HttpContext.User).Claims;

            if (null != qry)
            {
                foreach (System.Security.Claims.Claim item in qry)
                {
                    if (item.Type == "preferred_username")
                    {
                        str = item.Value;
                    }
                }
            }
        }else if (!Request.IsAuthenticated && Request.Form.Count > 0)
        {                
            HttpContext.Current.GetOwinContext().Authentication.Challenge(
                new AuthenticationProperties { },
                  OpenIdConnectAuthenticationDefaults.AuthenticationType);
        }
        else
        {
            HttpContext.Current.GetOwinContext().Authentication.Challenge(
                new AuthenticationProperties { RedirectUri = "/XXXapp locationXXX/" },
                  OpenIdConnectAuthenticationDefaults.AuthenticationType);
        }
    }

0 Ответов