Как войти через внешний API сгенерировать JWT?

У меня есть внешний API, который включает службу входа в систему и генерирует JWT, что мне нужно, чтобы подключить мое основное приложение asp.net к этой внешней службе входа для входа через сгенерированный токен.

try
{
                // validate user name and password
                loginInfo = await service.LoginAsync(loginUrl, userName, password);


                await HttpContext.SignInAsync(loginInfo.Token);
                returnTo = returnUrl;
                success = true;
            }
            catch (Exception httpEx)
            {

            }

person Mohammed Qamhawi    schedule 04.01.2018    source источник
comment
что ты уже испробовал? Какой сервер OIDC/OAuth вы используете? У вас слишком мало информации, чтобы дать вам конкретный ответ   -  person Tseng    schedule 04.01.2018
comment
Я использую внешний сервер аутентификации, зависящий от OAuth 2.0, и loginInfo.Token дает мне сгенерированный токен. Мне нужно использовать этот токен в моем основном приложении asp.net для входа. Дайте мне знать, если вам нужна дополнительная информация.   -  person Mohammed Qamhawi    schedule 04.01.2018
comment
Но HttpContext.SignInAsync ожидает ClaimsPrincipal или утверждает в большинстве своих перегрузок. Как вы ожидали, что это сработает с токеном, о котором мы даже не знаем, как он выглядит?   -  person Tseng    schedule 04.01.2018
comment
Можете ли вы предоставить мне образец, который объясняет, как использовать внешнюю службу, которая генерирует JWT с основным приложением asp.net для входа?   -  person Mohammed Qamhawi    schedule 05.01.2018
comment
возможно, этот вопрос поможет вам stackoverflow.com/questions/48249428/   -  person Hasan Fathi    schedule 16.01.2018


Ответы (1)


Попробуйте это, чтобы вызвать внешний API, чтобы получить токен и использовать его в своем проекте.

public class Wrapper
{
    string baseUrl = string.Empty;
    string token = string.Empty;

    public Wrapper()
    {
        this.baseUrl = "your url";
    }

    public async Task<object> GetToken(string username, string password)
    {
        string Url = "/api/Token/Get";
        object body = null;

            body = new
            {
                Username = username,
                Password = password
            };

        try
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(baseUrl);
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage Response = await client.PostAsync(Url, new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json")).ConfigureAwait(false);
                if (Response.IsSuccessStatusCode)
                {
                    var result = Response.Content.ReadAsStringAsync().Result;
                    if (string.IsNullOrEmpty(JObject.Parse(result).Property("error").Value.ToString()))
                    {
                        token = JObject.Parse(result).Property("access_token").Value.ToString();
                        return token;
                    }
                    else
                    {
                       return string.Empty;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            return null;
        }
    }
}
person Hasan Fathi    schedule 15.01.2020