Как переключиться с гибридного потока на поток 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)


arrow_upward
0
arrow_downward

Если вы хотите, чтобы результатом потока пароля владельца ресурса был пользователь, выполнивший вход в систему, вам необходимо выпустить основной файл 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