API Callback_URL无效呼叫

时间:2018-04-23 12:33:54

标签: android web-services callback oauth-2.0

我刚开始使用Android上的Strava API。为了使用它,我首先需要成功设置OAuth2。为此,我选择使用Scribe库,因为我在之前的实现中使用过它。

身份验证发生在MainActivity的onCreate()方法中。测试应用程序使用MainActivity旁边的两个类。 StravaOAuth20ServiceImpl用于配置令牌的API请求和撤消令牌。 StravaOAuth2Api包含API的EndPoints。这看起来还不错。

我没有从回调中获取代码。这就是我被困的地方。为了运行,需要在Strava,Android Manifest和API EndPoint调用的Developer Settings中正确设置回调。

我目前正在开发模式中工作..在网站上声明" localhost127.0.0.1是白名单",所以我在callback_url中使用了这些。对于这两者,我得到以下JSON作为响应:

{
"message": "Bad Request",
"errors": [
{
"resource": "Application",
"field": "redirect_uri",
"code": "invalid"
}
]
}

所以这两个电话都无效......

- https://www.strava.com/oauth/authorize?response_type=code&client_id=25016&redirect_uri=127.0.0.1

- https://www.strava.com/oauth/authorize?response_type=code&client_id=25016&redirect_uri=localhost

相关问题是关于callback_url的形式。我为FitBit做了同样的事情,并使用了#34; http://callback_myapplication"形式的回调。为了做到这一点,我必须建立一个"主机"和"计划"在我的Android Manifest中(参见下面的代码)。当我在我的应用程序设置中尝试这样做时,我收到一条错误消息" Field必须是一个域,没有//" (见下面的打印屏幕)。这是我第一次看到这个。是没有" scheme"的回调?然后?

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.LAUNCHER" />
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:host="127.0.0.1"
            android:scheme="http"/>
    </intent-filter>

enter image description here

事先感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

OAuth2 documentation之后,您必须使用与授权设置中包含的值完全相同的值。

因此,在你的情况下, redirect_uri param应为:

<span class="input-group-text"><i [ngClass]="toggle2 ? 'fa fa-eye' : 'fa fa-eye-slash'"></i></span>

最佳!

答案 1 :(得分:0)

Strava 的官方文档在这里: https://developers.strava.com/docs/authentication/

根据他们的文档,localhost 和 127.0.0.1 都被列入白名单。因此,无论应用程序页面上的设置如何,重定向都应该适用于 localhost。这也是我的经验:重定向到本地主机的任何端口应该可以正常工作。

当需要设置真实的 URL 时,回调域设置应该只是域名。没有协议(例如 http/https),没有端口号。例如,只需“myapp.domain.com”。