Auth0 AuthenticationAPI с использованием AuthenticationRequest

Я пытаюсь сделать "простое" консольное приложение, которое использует онлайн-API EVE, оно использует проверку Auth0 для некоторых запросов API

Сведения о Swagger https://esi.tech.ccp.is/ui/ URL-адрес Auth0 https://login.eveonline.com/oauth/authorize?

в настоящее время я пытаюсь войти в систему систематически, но я получаю сообщение об ошибке

JsonReaderException: неожиданный символ, обнаруженный при анализе значения: <. Путь '', строка 0, позиция 0.

Я думаю, что я делаю процесс неправильно в первую очередь, и это просто пытается передать по умолчанию json {"error": "invalid_request", "error_description": "Некоторые параметры либо отсутствуют, либо недействительны"}

Может ли кто-нибудь помочь мне указать, что мне не хватает, пожалуйста

private static void Main()
        {
            var t = Task.Run(() => LoginAsync());
            t.Wait();
        }

private static async Task LoginAsync()
        {
            const string URL = "https://login.eveonline.com/oauth/authorize?";
            AuthenticationApiClient client = new AuthenticationApiClient(new Uri(URL));

        var cred = new Auth0.AuthenticationApi.Models.AuthenticationRequest
        {
            ClientId = "abcdef",
            Username = "UN",
            Password = "PW",
            Scope = "esi-markets.structure_markets.v1",
            Connection = "Username-Password-Authentication"

        };
        Auth0.AuthenticationApi.Models.AuthenticationResponse response = await client.AuthenticateAsync(cred);            
    }

Я пытаюсь получить токен авторизации, чтобы я мог выполнять с ним дополнительные запросы.

Я новичок в auth0 и очень начинающий.

Большое спасибо,

1 ответ

Вы пытаетесь получить токен доступа, используя неявное предоставление, которое является неправильным. Неявное предоставление должно выполняться только в браузере (клиент Javascript). Для неинтерактивного клиента вы можете внедрить Предоставление учетных данных клиента или Предоставление пароля владельца ресурса для получения токена доступа. Сначала создайте клиент Machine to Machine и используйте его учетные данные для токена. Следующий код реализует предоставление учетных данных клиента.

 class Program
    {
        private static string accessToken;
        private static async Task Main(string[] args)
        {
            await ClientCredentialsFlow();
        }

        protected static async Task ClientCredentialsFlow()
        {
            var body = new Model
            {
                grant_type = "client_credentials",
                client_id = "[client id]",
                client_secret = "[client secret]",
                audience = "[API Identifier]"
            };
            using (var client = new HttpClient())
            {
                var content = JsonConvert.SerializeObject(body);
                var stringContent = new StringContent(content, Encoding.UTF8, "application/json");
                var res = await client.PostAsync("https://[domain].auth0.com/oauth/token", stringContent);
                var responseBody = await res.Content.ReadAsStringAsync();
                var deserilizeBody = JsonConvert.DeserializeObject<AuthResponseModel>(responseBody);
                accessToken = deserilizeBody.access_token;
                Console.WriteLine(accessToken);

            }
        }

        internal class Model
        {

            public string grant_type { get; set; }
            public string client_id { get; set; }
            public string client_secret { get; set; }
            public string audience { get; set; }
        }

        internal class AuthResponseModel
        {
            public string access_token { get; set; }
            public string scopes { get; set; }
            public string expires_in { get; set; }
            public string token_type { get; set; }
        }

    }
}

Чтобы реализовать предоставление пароля владельца ресурса, посмотрите следующий документ. https://auth0.com/docs/api-auth/tutorials/password-grant

Другие вопросы по тегам