【问题标题】:Scribe - don't ask for permission when the application has already been accepted抄写员 - 当申请已经被接受时不要请求许可
【发布时间】:2012-04-05 22:07:44
【问题描述】:

我正在使用 Scribe 登录 google 和 Twitter。它运行良好,但如果用户已经接受,我希望允许应用程序直接连接而无需用户干预。

Scribe 可以吗?如果是,我该怎么做?

【问题讨论】:

    标签: java oauth scribe


    【解决方案1】:

    是的。您可以将access_tokenaccess_token_secret 保存在任何地方(数据库、键值存储、会话等)并使用它们直到它们过期(它们对于大多数提供者来说是长期存在的)。

    编辑(对 cme​​ts 的回答)

    我猜你有一种方法来识别你的用户,假设这被称为user_id,我会将它存储在一个持久媒体(不是会话)中,如下所示:

    user_id

    access_token

    access_token_secret

    然后,从媒体中获取令牌和秘密,并使用以下命令重新创建令牌:

    new Token(access_token, access_token_secret);

    【讨论】:

    • 好的,但是如果它保存在数据库中,我该如何取回它?让我来说明典型的用例: - 用户第一次使用 google 连接。该服务要求他允许保存他的邮件。他同意。 - 一周后,它回来并想与谷歌连接。 session 变量已经过期(很明显),除非他先连接到服务,否则服务器无法知道它是什么用户。我想我需要发送一个特定的参数告诉它不要再次请求许可,但我不知道是哪一个......
    • 我现在正在使用 cookie...我认为这不是最好的解决方案。但至少它有效......
    • 对编辑的回答:正如我所说,我将信息保存在 cookie 中。我觉得奇怪的是,如果我已经在我的个人资料中允许了我的应用程序,如果我丢失了 cookie,服务不会自动给我一个新的令牌。我必须重新允许它,尽管我的个人资料选项中仍然允许它......
    【解决方案2】:

    是的。使用 twitter 的授权 url 的以下值:

    Scribe scribe = new ServiceBuilder()
                    .provider(org.scribe.builder.api.TwitterApi.class)
                    .apiKey(...)
                    .apiSecret(...)
                    .callback(...);
    Token requestToken = scribe.getRequestToken();
    String authorizationUrl = "https://twitter.com/oauth/authenticate?oauth_token="
          + requestToken.getToken();
    // and redirect user to the authorization URL
    // twitter will redirect it back to the callback URL if 
    // the user has already been authorized your app.
    

    【讨论】:

    • 您使用的是非常过时的版本。最新(无属性)版本在这里:github.com/fernandezpablo85/scribe-java
    • 无论如何,你需要使用这个url进行授权(不管它存储在哪里)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多