Как переключиться с гибридного потока на поток ResourceOwner с помощью IdentityServer3

Мне нужно обновить (или понизить) мой веб-сайт, чтобы использовать локальную страницу входа. У меня все работало, используя гибридный поток, используя следующий код

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions(){});

А затем, когда токен вернется, он даст мне доступ для завершения логики аутентификации в asp.net, установив идентификатор утверждения, принципала и т. д.

  app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions()
            {

                Notifications = new OpenIdConnectAuthenticationNotifications()
                {
                    SecurityTokenValidated = async n =>
                    {
                       // perform transform, etc..

                        n.AuthenticationTicket = new AuthenticationTicket(
                            identity, n.AuthenticationTicket.Properties);

                        await Task.FromResult(0);
                    }
                }
            });

Теперь я собираюсь собрать имя пользователя и пароль из метода действия MVC. Таким образом я могу получить токен доступа от клиента.

        [HttpPost]
    public ActionResult Login(LoginModel model)
    {
        var client = new TokenClient(
            StsSettings.TokenEndpoint,
            ClientId,
            Secret);

        var x = client.RequestResourceOwnerPasswordAsync(model.UserName, model.Password, "customid openid").Result;

        return View(model);
    }

Но я не уверен, как проще всего указать ASP.NET указывать на мою пользовательскую страницу входа вместо сервера идентификации. Буду ли я использовать логику аутентификации с помощью форм и создавать AuthenticationTicket? Также как лучше установить ClaimsIdentity (я знаю как вернуть претензии, только нужен "крючок")


person Rod Johnson    schedule 14.06.2016    source источник


Ответы (1)


Если вы хотите, чтобы результатом потока пароля владельца ресурса был пользователь, выполнивший вход в систему, вам необходимо выпустить основной файл cookie проверки подлинности с утверждениями, которые у вас есть для этого нового пользователя, прошедшего проверку подлинности.

var claims = new Claim[] { new Claim("name", username), new Claim("sub", "4848784904"), new Claim("email", "[email protected]"), new Claim("role", "Admin"), new Claim("role", "Dev"), }; // "Cookies" is the name of your cookie middleware, // so change to match what you're actually using in Startup.cs var ci = new ClaimsIdentity(claims, "Cookies", "name", "role"); Request.GetOwinContext().Authentication.SignIn(ci); return Redirect("~/Home/Secure");

person Brock Allen    schedule 14.06.2016
comment
работал как шарм! Спасибо, и от себя лично, спасибо за всю вашу тяжелую работу для IdentityModel и IdentityServer и MembershipReboot!! - person Rod Johnson; 15.06.2016