【问题标题】:Apigee 401 Unauthorized with token_expiredApigee 401未经授权用令牌_expired
【发布时间】:2014-01-30 19:01:40
【问题描述】:

我正在尝试通过 apigee JS API 创建用户帐户。当我在十二月中旬假期前最后一次这样做时,这工作得很好。但是,现在我收到了一个 401 Unauthorized 错误,读取 token_expired

有没有办法刷新令牌?我不知道为什么它会过期。

这就是我正在尝试的。首先我实例化数据客户端。这里没有问题:

var dataClient;
var client_creds = {
    orgName: '*******',
    appName: '*******'
}
dataClient = new Apigee.Client(client_creds);

后来,在尝试创建新用户时,我收到了token_expired 错误:

dataClient.request(options, function (error, response) {
        if (error) {
            console.log(response);
            alert("Something went wrong when trying to create the user. " + response.error)
            // Error
        } else {
            // Success - the user has been created, now login.
            dataClient.login(user.email, user.password,
                function (err) {
                    if (err) {
                        //error - could not log user in
                        console.log("There was an error logging in " + user.name);
                    } else {
                        //success - user has been logged in
                    }
                }
            );
        }
    });

我也试过dataClient.signup,但同样的错误。

【问题讨论】:

    标签: apigee


    【解决方案1】:

    应用服务中没有刷新令牌;您需要按照login flow 来检索新令牌。请注意,您可以像这样指定ttl 参数,因此您不需要经常这样做:

    https://api.usergrid.com/{org}/{app}/token?ttl=604800
    

    默认设置为 7 天,但您可以将 默认 应用程序最大 ttl 更改为 0(不会过期)或其他类似 31104000000(365 天)的内容。

    为此,您发出PUT 请求:

    https://api.usergrid.com/{org}/{app}/?client_id={app_client_id}&client_secret={app_client_secret}
    

    使用 JSON 负载:

    {
        "accesstokenttl":0
    }
    

    或 1 年:

    {
        "accesstokenttl":31104000000
    }
    

    【讨论】:

    • 谢谢 - 令牌永不过期会有什么缺点?在我的情况下,令牌只是为了获得对应用程序数据的最默认访问权限,例如创建新用户并登录。
    • 缺点是,如果令牌被泄露,您必须手动使其无效(我相信通过更改帐户密码或重新调用.../token)否则任何拥有它的人都可以拨打电话永远使用那个令牌。取决于您的数据的敏感程度。
    • 我仍然对你所说的 the login flow 的意思有些困惑。我无法登录我的用户,因为创建的应用程序令牌已过期并存储在本地存储中。我必须删除旧令牌吗?我不喜欢使用 client_secret,因为如果可以避免的话,我不想在项目中使用它。
    • 您可以对令牌端点进行原始 POST 调用,它会像重新登录您一样。或者,如果本地存储会导致应用程序身份验证失败,则可以删除现有令牌它实际上并没有使令牌失效。
    【解决方案2】:

    如果这对您不起作用,JavaScript SDK 的授权令牌将保存在您浏览器的本地存储中。在 Chrome 中,使用开发者工具。在左侧的资源选项卡中,展开本地存储条目。你应该看到类似“http://usergrid.dev”或类似的东西。选择它,在右侧您应该会看到 accessToken 的条目。删除它,它应该可以解决您的问题。

    【讨论】:

    • 那么如何刷新令牌呢?我有同样的问题。令牌已过期,现在我的 QA 人员无法登录。是否可以在每次登录时请求一个新令牌?这不就是它应该的工作方式吗?
    猜你喜欢
    • 2016-05-17
    • 1970-01-01
    • 2011-11-16
    • 2023-03-03
    • 1970-01-01
    • 2015-01-24
    • 2014-06-25
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多