La autorización de tipo OAuth permite la autorización segura desde aplicaciones de escritorio y servicios web de una manera simple y estándar.
Permite a los usuarios aprobar una aplicación para actuar en su nombre sin compartir su nombre de usuario y contraseña.
Para realizar cualquier operación de lectura/escritura utilizando el servicio REST en este ejemplo de SharePoint, primero necesitamos el “token de acceso de SharePoint” para la autenticación.
Para obtener el “token de acceso de SharePoint”, se pueden usar los siguientes detalles de REST:
REST-URL: https://accounts.accesscontrol.windows.net/ <tenantID> /tokens/OAuth/2
Método: POST
Encabezados: Tipo de contenido: “aplicación/x-www-form-urlencoded”
Cuerpo: ( Formato de parámetro de solicitud )
grant_type=client_credentials
&client_id=<shp_clientId>@<shp_tenantId>
&client_secret=<shp_clientSecret>
&resource=00000003-0000-0ff1-ce00-000000000000/<org_Shp_Host>@<shp_tenantId>
Nota: Los siguientes detalles son específicos de los datos de SharePoint de la organización:
<shp_clientId>: el ID de cliente es un GUID para el complemento de SharePoint
<shp_tenantId>: el Id. de inquilino es el dominio del sitio de SharePoint Online
<shp_clientSecret>: Client Secret es la contraseña para los complementos.
<org_Shp_Host>: nombre de host de SharePoint de la organización
Ejemplo de SAP PI UDF para obtener el token de acceso de SharePoint:
Las importaciones de Java requeridas en UDF son como:
java.net.URL
java.net.URLConnection
java.net.HttpURLConnection
Parámetros de entrada de Java:
Código UDF de Java:
public String getShpToken(String shp_clientId, String shp_tenantId, String shp_clientSecret, String shp_clientDomain, Container container) throws StreamTransformationException{
/**
* This function helps to get SharePoint Access Token. SharePoint Access
* Token is required to authenticate SharePoint REST service while performing Read/Write events.
* SharePoint REST-URL to get access token is as:
* https://accounts.accesscontrol.windows.net/<tenantID>/tokens/OAuth/2
*
* Input required related to SharePoint are as:
* 1. shp_clientId
* 2. shp_tenantId
* 3. shp_clientSecret
*/
String accessToken = “”;
try {
// AccessToken url
String wsURL = “https://accounts.accesscontrol.windows.net/” + shp_tenantId + “/tokens/OAuth/2”;
URL url = new URL(wsURL);
URLConnection connection = url.openConnection();
HttpURLConnection httpConn = (HttpURLConnection) connection;
// Set header
httpConn.setRequestProperty(“Content-Type”, “application/x-www-form-urlencoded”);
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.setRequestMethod(“POST”);
// Prepare RequestData
String jsonParam = “grant_type=client_credentials”
+ “&client_id=” + shp_clientId + “@” + shp_tenantId
+ “&client_secret=” + shp_clientSecret
+ “&resource=00000003-0000-0ff1-ce00-000000000000/<org_Shp_Host>@” + shp_tenantId;
//Here, <org_Shp_Host> is “Origanisations’s Sharepoint Host”
// Send Request
DataOutputStream wr = new DataOutputStream(httpConn.getOutputStream());
wr.writeBytes(jsonParam);
wr.flush();
wr.close();
// Read the response.
InputStreamReader isr = null;
if (httpConn.getResponseCode() == 200) {
isr = new InputStreamReader(httpConn.getInputStream());
} else {
isr = new InputStreamReader(httpConn.getErrorStream());
}
BufferedReader in = new BufferedReader(isr);
String responseString = “”;
String outputString = “”;
// Write response to a String.
while ((responseString = in.readLine()) != null) {
outputString = outputString + responseString;
}
// Extracting accessToken from string, here response (outputString)is a Json format string
if (outputString.indexOf(“access_token\”:\””) > -1) {
int i1 = outputString.indexOf(“access_token\”:\””);
String str1 = outputString.substring(i1 + 15);
int i2 = str1.indexOf(“\”}”);
String str2 = str1.substring(0, i2);
accessToken = str2;
}
} catch (Exception e) {
accessToken = “Error: ” + e.getMessage();
}
return accessToken;
}
Pantalla de prueba de UDF dentro del mapa gráfico: