Loading
Identificar sus usuarios y gestionar el acceso
ƍndice de materias
Seleccionar filtros

          No hay resultados
          No hay resultados
          Estas son algunas sugerencias de bĆŗsqueda

          Compruebe la ortografĆ­a de sus palabras clave.
          Utilice términos de búsqueda mÔs generales.
          Seleccione menos filtros para ampliar su bĆŗsqueda.

          Buscar en toda la Ayuda de Salesforce
          Crear una devolución de llamada del lado del servidor de Inicio de sesión integrado

          Crear una devolución de llamada del lado del servidor de Inicio de sesión integrado

          Utilice la devolución de llamada del lado del servidor en vez de una devolución de llamada del lado del cliente para evitar exponer el token de acceso en el cliente. Para crear una devolución de llamada del lado del servidor, utilice el flujo servidor web de OAuth 2.0.

          Advertencia
          Advertencia En Summer ’24, Salesforce desactivó Inicio de sesión integrado de forma predeterminada. Recomendamos que utilice el flujo de servidor web, el flujo usuario-agente u otro flujo de OAuth 2.0 basado en redireccionamiento en vez de Inicio de sesión integrado.

          Inicio de sesión integrado se basa en cookies de terceros, que estÔn bloqueadas o restringidas en la mayoría de navegadores. Inicio de sesión integrado solo funciona en Google Chrome y solo si las cookies de terceros estÔn permitidas allí de forma predeterminada.

          Cuando utiliza la devolución de llamada del lado del servidor, cree un servlet separado que implemente el flujo de servidor web utilizando el tipo de otorgamiento de código de autorización OAuth 2.0.

          Utilice estos pasos para crear el servlet de devolución de llamadas del lado del servidor.

          1. Implemente el flujo de servidor web. Para ver los pasos detallados para implementar este flujo, consulte Flujo de servidor web de OAuth 2.0 para la integración de aplicaciones web.
          2. Cree la respuesta de OAuth que publica Inicio de sesión integrado después de recibir un token de acceso con éxito.
            La respuesta debe contener estas etiquetas meta.
            • salesforce-community
            • salesforce-mode (donde el valor termina por -callback)
              Nota
              Nota El valor de la etiqueta meta salesforce-mode es el mismo modo especificado en la pÔgina web de Inicio de sesión integrado con el sufijo -callback. Por ejemplo, si salesforce-mode en la pÔgina web estÔ establecido en modal, el valor es modal-callback.
            • salesforce-server-callback (donde el valor debe ser true)
            • salesforce-server-response
            • salesforce-server-starturl
              Nota
              Nota Si el parÔmetro Bloquear redireccionamiento a URL desconocida estÔ activado para el sitio, Salesforce bloquea los redireccionamientos a direcciones URL desconocidas proporcionados en el parÔmetro de estado de la respuesta de OAuth. Los redireccionamientos se permiten cuando la URL estÔ en el mismo host o dominio que el sitio, o estÔ en la lista de admisión en la metaetiqueta salesforce-allowed-domains de Inicio de sesión integrado.
            • salesforce-target
            • salesforce-allowed-domains
            Puede incluir salesforce-save-access-token con el valor true para guardar el token de acceso después de la inicialización. Antes de guardar el token de acceso, puede seguir interactuando con Salesforce durante la sesión de usuario activa.
          3. En su pÔgina web de Inicio de sesión integrado, especifique estas etiquetas meta.
            1. Agregue la etiqueta meta salesforce-server-callback con el valor true. Esta etiqueta meta indica que la devolución de llamada debe controlar la respuesta HTTP en el servidor.
              <meta name="salesforce-server-callback" content="true">
            2. Asegúrese de que la etiqueta meta salesforce-redirect-uri hace referencia a la ubicación del servlet de devolución de llamadas del lado del servidor. Utilice la misma URL especificada en el campo URL de devolución de llamada de su aplicación cliente externa Inicio de sesión integrado.
              <meta name="salesforce-redirect-uri" content="https://embeddedlogin.heroku.com/servlet/servlet.serversidecallback>
            3. Asegúrese de que salesforce-mode en esta pÔgina web coincide con el modo en la devolución de llamada del lado del servidor.
          Ejemplo
          Ejemplo
          Nota
          Nota Este servlet de devolución de llamadas utiliza la codificación en base64 en la respuesta del servidor.
          package servlet;
          
          import org.apache.commons.httpclient.HttpClient;
          import org.apache.commons.httpclient.methods.GetMethod;
          import org.apache.commons.httpclient.methods.PostMethod;
          
          import org.json.JSONObject;
          
          import javax.servlet.ServletConfig;
          import javax.servlet.ServletException;
          import javax.servlet.ServletOutputStream;
          import javax.servlet.annotation.WebServlet;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          
          
          import javax.servlet.http.*;
          import java.io.IOException;
          import java.io.PrintWriter;
          import java.net.URLDecoder;
          import java.nio.charset.StandardCharsets;
          import java.util.Base64;
          
          @WebServlet(
                  name = "CallbackServlet2",
                  urlPatterns = {"/_callback"}
              )
          public class ServerSideCallbacks extends HttpServlet{
          
          	// Client ID
              private static final String CLIENT_ID= 
          "3MVG9xOCXq4ID1uF8V6oKd32SPVi6FHwEOQlQ5BjvaKX.5QZpGe4Z3F4fc6KvMYsQ.fi314cp0oZ8KpOBs4Mh";
          
              // client secret
              private static final String CLIENT_SECRET = "9103416584217247123";
              
              @Override
              public void init(ServletConfig config) throws ServletException {
                  super.init(config);
              }
          
              @Override
              protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                  throws 
                  ServletException, IOException {
          
                  String code = request.getParameter("code");
                  if (code != null) {
                      code = URLDecoder.decode(code, "UTF-8");
                  }
                  String startURL = request.getParameter("state");
                  if (startURL != null) {
                      startURL = URLDecoder.decode(startURL, "UTF-8");
                  }
                          
                  String tokenResponse = null;
                  String communityUrl = null;
                  HttpClient httpclient = new HttpClient();
                  try {            
                      // community_url parameter passed from redirect uri.
                      communityUrl = request.getParameter("sfdc_community_url");
                      // Token endpoint : communityUrl + "/services/oauth2/token";
                      PostMethod post = new PostMethod(communityUrl+"/services/oauth2/token");
                      post.addParameter("code",code);
                      post.addParameter("grant_type","authorization_code");
                      // Consumer key of the external client app.
                      post.addParameter("client_id", CLIENT_ID);
                      // Consumer Secret of the external client app.
                      post.addParameter("client_secret",CLIENT_SECRET);
                      
                      // Callback URL of the external client app.
                      post.addParameter("redirect_uri", 
                          "https://boiling-brushlands-41143.herokuapp.com/_callback");
                      
                      httpclient.executeMethod(post);
                      tokenResponse = post.getResponseBodyAsString();
                      post.releaseConnection();
           
                      System.err.println("tokenResponse: " + tokenResponse);
                  } catch (Exception e) {
                  		throw new ServletException(e);
                  }
          
          
                  JSONObject identityJSON = null;
                  try {
                      JSONObject token = new JSONObject(tokenResponse);
                      // get the access token from the response
                      String accessToken = token.getString("access_token");
                      String identity = token.getString("id");
                      httpclient = new HttpClient();
                      GetMethod get = new GetMethod(identity + "?version=latest");
                      get.setFollowRedirects(true);
                      get.addRequestHeader("Authorization", "Bearer " + accessToken);
                      
                      // get identity information using the access token
                      httpclient.executeMethod(get);
                      String identityResponse = get.getResponseBodyAsString();
                      get.releaseConnection();
                      identityJSON = new JSONObject(identityResponse);
                      identityJSON.put("access_token", accessToken);
                  } catch (Exception e) {
                      throw new ServletException(e);
                  }
                  
          
                  response.setContentType("text/html; charset=utf-8");
                  PrintWriter out = response.getWriter();
          
                 //  Notice that we’re using base64 encoded
                  String outputStr =  "<html><head>\n" +
                     "<meta name=\"salesforce-community\" content=\""+ communityUrl +"\">\n" +
                      // notice the -callback in the salesforce-mode content value
          		         "<meta name=\"salesforce-mode\" content=\"modal-callback\">\n" +
                       "<meta name=\"salesforce-server-callback\" content=\"true\">\n" +
          
          		  // send the identity information back to the Embedded Login                
                           "<meta name=\"salesforce-server-response\" content='" + 
                          Base64.getEncoder().encodeToString(identityJSON.toString().
                             getBytes(StandardCharsets.UTF_8))+"'>\n" +
                          "<meta name=\"salesforce-server-starturl\" content='" + startURL +"'>\n" +
                          "<meta name=\"salesforce-target\" content= \"#salesforce-login\">\n"+
                          "<meta name=\"salesforce-allowed-domains\" 
                          content=\"boiling-brushlands-41143.herokuapp.com\">\n" +
                          "<script src=\""+ communityUrl + 
                           "/servlet/servlet.loginwidgetcontroller?type=javascript_widget\"" +
                          " async defer></script>\n" +
                          "</head><body></body></html>";
                  out.write(outputStr);
              }
          
          }
          
           
          Cargando
          Salesforce Help | Article