программно войти в identityserver3

У меня есть сторонний веб-сайт, который встраивает в него мой веб-сайт, и мой веб-сайт проверяет третью сторону с помощью некоторых ключей в параметрах URL.

Сторонний пользователь входит в систему со своей собственной моделью аутентификации (поскольку они не используют единый вход или федерацию с моим веб-сайтом), и мой веб-сайт работает с моим собственным поставщиком удостоверений, реализованным IdentityServer3.

Вопрос в следующем: могу ли я программно войти под олицетворенным пользователем в свой IDP? Как будто сторонние пользователи входят на свой веб-сайт и получают доступ к моему встроенному веб-сайту, тогда мой веб-сайт автоматически входит в мой idp с олицетворенным пользователем, и мой веб-сайт отображается для стороннего пользователя?

схема взаимодействия


person Mamrez    schedule 03.12.2016    source источник


Ответы (1)


Да, ты можешь

            var client = new HttpClient();
        var dic = new Dictionary<string, string>();
        dic.Add("client_id", "mvc");
        dic.Add("client_secret", "secret");
        dic.Add("grant_type", "password");
        dic.Add("scope", "openid profile");
        dic.Add("username", "[email protected]");
        dic.Add("password", "P@ssword1");

        var content = new FormUrlEncodedContent(dic);

        var msg = client.PostAsync("https://localhost:44383/identity/connect/token", content).Result.Content.ReadAsStringAsync().Result;
        string token = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(msg).access_token;

        var jwt = new JwtSecurityToken(token);
        var identity = new ClaimsIdentity("ApplicationCookie", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
        foreach (var c in jwt.Claims)
        {
            var t = c.Type;
            var v = c.Value;

            identity.AddClaim(new Claim(t, v));

        }
            IAuthenticationManager authenticationManager = HttpContext.GetOwinContext().Authentication;
            authenticationManager.SignOut("ApplicationCookie");
            authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);

        return Redirect("Index");
person Yazan Ati    schedule 10.12.2016
comment
Безопасно ли отправлять пароль через это? Я знаю, что он зашифрован при использовании в HTTPS, но я не уверен, есть ли более безопасные способы сделать это... - person Marlon Allan Supetran; 15.08.2018