如何向kong插件请求OAuth2令牌

时间:2020-03-03 22:59:27

标签: python-3.x http https oauth-2.0 kong

我正在按照本教程https://medium.com/@far3ns/kong-oauth-2-0-plugin-38faf938a468进行操作,当我使用

请求令牌时
Headers: Content-Type:application/json
Host:api.ct.id
Body:
{
“client_id”: “CLIENT_ID_11”,
“client_secret”: “CLIENT_SECRET_11”,
“grant_type”: “password”,
“provision_key”: “kl3bUfe32WBcppmYFr1aZtXxzrBTL18l”,
“authenticated_userid”: “oneone@gmail.com”,
“scope”: “read”
} 

返回

{
  "error_description": "Invalid client authentication",
  "error": "invalid_client"
}

无论我尝试了什么,我都无法解决它,不知道如何使其正常工作

2 个答案:

答案 0 :(得分:0)

您需要创建kong开发人员,它会为您提供client_id和client_secret_Id。在生成身份验证令牌时使用这些值。

答案 1 :(得分:0)

这是工作的 c# 代码。

选项 1

public static string GetOAuthToken(string url, string clientId, string clientSecret, string scope = "all", string grantType = "client_credentials")
        {
            try
            {
                string token = "";
                if (string.IsNullOrWhiteSpace(url)) throw new ArgumentException("message", nameof(url));
                if (string.IsNullOrWhiteSpace(clientId)) throw new ArgumentNullException("message", nameof(clientId));
                if (string.IsNullOrWhiteSpace(clientSecret)) throw new ArgumentNullException("message", nameof(clientSecret));

                var oAuthClient = new RestClient(new Uri(url));
                var request = new RestRequest("Authenticate", Method.POST);

                request.AddHeader("Content-Type", "application/json");

                var credentials = new
                {
                    grant_type = grantType,
                    scope = scope,
                    client_id = clientId,
                    client_secret = clientSecret
                };

                request.AddJsonBody(credentials);

                var response = oAuthClient?.Execute(request);
                var content = response?.Content;

                if (string.IsNullOrWhiteSpace(content)) throw new ArgumentNullException("message", nameof(clientSecret));
                token = content?.Trim('"');

                return token;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message,ex);
            }
        }

选项 2

var httpClient = new HttpClient()
var creds = $"client_id={client_id}&client_secret{client_secret}&grant_type=client_credentials";
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
var content = new StringContent(creds, Encoding.UTF8, "application/x-www-form-urlencoded");
var response = httpClient.PostAsync("https://myorg/oauth/oauth2/cached/token", content).Result;
var OAuthBearerToken = response.Content.ReadAsStringAsync().Result;