将adobe creative SDK集成到网络应用中时,我得到:{"error":"invalid_credentials"}

Raa*_*dor 1 javascript web adobecreativesdk

我关注了网站:入门样本.当AdobeCreativeSDK.init调用该函数时,它https://adobeid-na1.services.adobe.com/ims/check/v4/token首先使用请求方法OPTIONS 调用,然后使用请求方法POST 调用,两者都返回状态代码200 OK.对POST请求的响应返回{"error":"invalid_credentials"},我不知道为什么以及如何解决这个问题.

任何帮助将不胜感激.

tec*_*bia 5

故障排除:

你在控制台看到这样的东西吗?

XMLHttpRequest无法加载https://adobeid-na1.services.adobe.com/ims/check/v4/token.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此,不允许来源" https://your.domain.com "访问.

那么您可能没有有效的SSL证书.


从文档:

从Adobe 开始使用Creative SDK for Web:

如果由于"Access-Control-Allow-Origin"而导致XMLHttpRequest错误,则可能是您的SSL设置存在问题(如本指南的"先决条件"部分所述,需要SSL).

以下是先决条件部分[ 重点补充 ]中所述的内容:

先决条件

  1. 在使用Creative SDK之前,您必须注册您的应用程序并获取客户端ID(API密钥)和客户端密钥值.有关详细信息,请参阅本指南的"注册您的应用程序"部分.

  2. 需要以下软件:

    • 支持的浏览器:Chrome 53 +,Safari 9 +,Firefox 45 +,Edge,IE11 +
    • 需要SSL:您的网站必须在集成Creative SDK的任何页面上支持SSL.

可能解决方案

如果您正在从您的开发机器上进行测试localhost,那么您需要修改hosts文件并设置映射到127.0.0.1的自己的域,然后您需要在服务器上配置自签名证书.

您可能还想查看如何使用本地(来自他们的Github回购)有这个美妙的宝石:

openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
Run Code Online (Sandbox Code Playgroud)

有用的资源:


我是如何工作的:

1. Adob​​e I/O设置:

以下是我在Adobe I/O上配置测试应用程序的方法:

在此输入图像描述

2.本地HTTP服务器(SSL)

在根目录下,要创建自签名证书,请运行:

openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
Run Code Online (Sandbox Code Playgroud)

然后,我设置了一个简单的python服务器,它使用server.pem上面创建的自签名证书:

# ./start.py
import BaseHTTPServer, SimpleHTTPServer
import ssl

httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='server.pem', server_side=True)
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)

启动我的服务器

python ./start.py
Run Code Online (Sandbox Code Playgroud)

3.点击https:// localhost:4443

重要说明:您将获得具有以下有效负载的200响应:{"error":"invalid_credentials"}在第二次呼叫时.只要您没有收到控制台错误,您的网络应用就准备好了.

根据文档,我添加了一个按钮csdk-login来测试User Auth UI api.


4.完全工作的代码

文件结构:

/app
??? config.js <-- my clientId config
??? index.html
??? index.js
??? server.pem <-- my self-signed cert
??? start.py  <-- my server
Run Code Online (Sandbox Code Playgroud)

HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Technophobia: SDK Getting Started</title>
</head>
<body>
    <h1>Adobe Creative SDK</h1>
    <p>Look at the console</p>

    <button id="csdk-login">Log in to Creative Cloud</button>

    <script type="text/javascript" src="https://cdn-creativesdk.adobe.io/v1/csdk.js"></script>
    <script type="text/javascript" src="config.js"></script>
    <script type="text/javascript" src="index.js"></script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

JS:

/* 1) Initialize the AdobeCreativeSDK object */
AdobeCreativeSDK.init({
    /* 2) Add your Client ID (API Key) */
    clientID: CONFIG.CSDK_CLIENT_ID, //
    API: ["Asset"],
    onError: function(error) {
        /* 3) Handle any global or config errors */
        if (error.type === AdobeCreativeSDK.ErrorTypes.AUTHENTICATION) {
            console.log('You must be logged in to use the Creative SDK');
        } else if (error.type === AdobeCreativeSDK.ErrorTypes.GLOBAL_CONFIGURATION) {
            console.log('Please check your configuration');
        } else if (error.type === AdobeCreativeSDK.ErrorTypes.SERVER_ERROR) {
            console.log('Oops, something went wrong');
        }
    }
});

/* 1) Add a click handler to a button that calls a helper function */
document.getElementById("csdk-login").addEventListener('click', handleCsdkLogin, false);

/* 2) Make a helper function */
function handleCsdkLogin() {

    /* 3) Get auth status */
    AdobeCreativeSDK.getAuthStatus(function(csdkAuth) {

        /* 4) Handle auth based on status */
        if (csdkAuth.isAuthorized) {
            // The user is logged in and has authorized your site.
            console.log('Logged in!');
        } else {
            // Trigger a login
            AdobeCreativeSDK.login(handleCsdkLogin);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)