es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo me conecto a Oracle Netsuite utilizando OAuth 2.0 Client Credentials Flow y JWT certificate con .net core?

Estoy intentando utilizar la API Rest de Netsuite. A continuación se detallan los pasos que he seguido.
https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_162730264820.html

  1. Creé un registro de integración en Netsuite
  2. Creé un certificado autofirmado:
    openssl req -x509 -newkey rsa:4096 -sha256 -keyout auth-key.pem -out auth-cert.pem -nodes -days 730
  3. Añadí el auth-cert.pem a la integración en Netsuite
  4. Intenté llamar al endpoint TokenUrl para obtener el token de acceso

Sigo obteniendo una solicitud incorrecta (código de estado 400) cuando llamo a GetNetsuiteJwtAccessToken (string signedJWTAssertion) para obtener el token de acceso desde TokenUrl.

static void Main(string[] args)
//static string Scope = “rest_webservices”;
//static string Aud = “https://-sb1.suitetalk.api.netsuite.com/services/rest/auth/oauth2/v1/token”;
//static string TokenUrl = “https://-sb1.suitetalk.api.netsuite.com/services/rest/auth/oauth2/v1/token”;
//static string TenantName = ““;

//static string ClientId = "<clientid>";
//static string Issuer = ClientId;
//static string ClientSecret = "<client secret="">";
//static string AppId = "<appid>";
//static string Kid = "<key from="" the="" netsuite="" for="" the="" uploaded="" cert="">"";

{
var jwt= GenerateNetsuiteJWTFromPEMFile(“auth-key.pem”);
var accessToken = GetNetsuiteJwtAccessToken(signedJWTAssertion: jwt);

}

public static string GenerateNetsuiteJWTFromPEMFile(string PEMFile)
{
var tokenHandler = new JwtSecurityTokenHandler();

        var rsaPem = File.ReadAllText(PEMFile);

        var privatekey = RSA.Create();
        privatekey.ImportFromPem(rsaPem);

        var key = new RsaSecurityKey(privatekey);
        //key.KeyId = Kid;

        var signingCredentials = new SigningCredentials(
            key: key,
            algorithm: SecurityAlgorithms.RsaSha256 
        );
        //signingCredentials.Key.KeyId = Kid;


        var Now = DateTimeOffset.UtcNow;
        var Exp = Now.AddMinutes(30).ToUnixTimeSeconds();
        var Iat = Now.ToUnixTimeSeconds();

        var jwt = new SecurityTokenDescriptor
        {
            Issuer = Issuer,
            Claims = new Dictionary<string, object="">()
            {
                ["iss"] = Issuer,
                ["scope"] = Scope,
                ["aud"] = Aud,
                ["exp"] = Exp,
                ["iat"] = Iat                
            },

            SigningCredentials = signingCredentials

        };
        var jws = tokenHandler.CreateToken(jwt);
        var encoded = new JwtSecurityTokenHandler().WriteToken(jws);
        return encoded;
    }

public static string GetNetsuiteJwtAccessToken(string signedJWTAssertion)
{
string accessToken;

          HttpClient _httpClient = new HttpClient();

        _httpClient.DefaultRequestHeaders.Clear();

        var requestParams = new List<><string, string="">>
        {
            new KeyValuePair<string, string="">("grant_type", "client_credentials"),
            new KeyValuePair<string, string="">("client_assertion_type", "urn:ietf:params:oauth:client-assertion-type:jwt-bearer"),
            new KeyValuePair<string, string="">("assertion", signedJWTAssertion)
        };

        using (var content = new FormUrlEncodedContent(requestParams))
        {
            var response = _httpClient.PostAsync(TokenUrl, content).Result;
            var responseContent = response.Content.ReadAsStringAsync().Result;
            accessToken = responseContent;
        }

        return accessToken;
    }</string,></string,></string,></string,></string,></key></appid></client></clientid></tenant></tenant></tenant>
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Consejos para la resolución de problemas utilizando la API de Rest Netsuite

    Como experto en informática especializado en OAuth, JWT, clientes y credenciales de Netsuite, hay varias cosas a considerar al utilizar la API de Rest Netsuite.

    Basado en los pasos anteriores tomados hasta ahora, revise las siguientes recomendaciones:

    1. Verifique que la TokenUrl sea precisa y que se hayan proporcionado las credenciales adecuadas para ClientId y ClientSecret.
    2. Verifique que el registro de integración creado en el paso 1 se haya configurado con los permisos adecuados, como el alcance rest_webservices.
    3. Asegúrese de que el token JWT generado en la línea 13 del código utilice las claves y algoritmos correctos, incluida la clave pública RSA y el algoritmo RsaSha256.
    4. Confirme que el Kid utilizado para identificar el certificado es correcto y corresponde al Kid en Netsuite.
    5. Verifique que el certificado autofirmado creado en el paso 2 del proceso esté bien configurado y que se haya agregado a la integración en Netsuite.
    6. Intente acceder a la URL del token utilizando una herramienta como Postman para verificar que el error 400 no se deba a factores externos fuera del script.

    Siguiendo los pasos anteriores, un usuario puede solucionar problemas y resolver cualquier problema que surja al intentar utilizar con éxito la API de Rest Netsuite.

Comments are closed.