【发布时间】:2022-08-08 19:44:46
【问题描述】:
我正在尝试使用AppAuth 通过 OAuth2 对 OpenStreetMap 进行身份验证。通过自定义选项卡,我可以检索授权代码,但重定向 URI 不会打开我的应用程序,但会给出一个找不到地址自定义选项卡中的错误。正如你所看到的,当我尝试解决这个问题时,我使用app.example.com 作为主机名,虽然包名是com.example.app,但即使我在重定向 URI 中使用包名作为主机名(并更改这在清单,gradle,osm等中),它仍然不起作用,但会导致无效的重定向 URI错误。所以我会假设重定向 URI 的某些内容不太正确,但我无法弄清楚它是什么。
我也不能使用自定义方案,如 OSM only accepts https redirect URIs。
MainActivity.java:
private static final String CLIENT_ID = ...;
private static final String REDIRECT_URI = \"https://app.example.com/oauth2redirect\";
...
AuthorizationRequest.Builder builder = new AuthorizationRequest.Builder(
authorizationServiceConfiguration,
CLIENT_ID,
ResponseTypeValues.CODE,
Uri.parse(REDIRECT_URI));
builder.setScopes(\"write_api\", \"read_prefs\");
AuthorizationRequest request = builder.build();
Intent authorizationIntent = authorizationService.getAuthorizationRequestIntent(request);
startActivityForResult(authorizationIntent, REQUEST_CODE);
清单.xml:
<activity
android:name=\".MainActivity\"
android:exported=\"true\">
<intent-filter>
<action android:name=\"android.intent.action.MAIN\" />
<category android:name=\"android.intent.category.LAUNCHER\" />
</intent-filter>
<intent-filter>
<action android:name=\"com.example.app.HANDLE_AUTHORIZATION_RESPONSE\" />
<category android:name=\"android.intent.category.DEFAULT\" />
</intent-filter>
</activity>
<activity android:name=\"net.openid.appauth.RedirectUriReceiverActivity\"
android:exported=\"true\">
<intent-filter>
<action android:name=\"android.intent.action.VIEW\"/>
<category android:name=\"android.intent.category.DEFAULT\"/>
<category android:name=\"android.intent.category.BROWSABLE\"/>
<data android:scheme=\"https\"
android:host=\"app.example.com\"
android:pathPrefix=\"/oauth2redirect\"/>
</intent-filter>
</activity>
构建.gradle
android {
...
defaultConfig {
applicationId \"com.example.app\"
...
manifestPlaceholders = [
appAuthRedirectScheme: \'app.example.com\'
]
}
在 OSM 中,我将重定向 URI 设置为 https://app.example.com/oauth2redirect
奇怪的是它昨天工作了一次,但从今天开始就不再工作了。我恢复了所有更改,重置了应用程序,删除了所有数据并重新启动了我的手机,但无法让它再次工作。
我已尝试根据需要显示尽可能少的代码,如果您需要更多信息来解决此问题,请告诉我。
编辑:我刚刚注意到它适用于 Pixel 5 API 30 虚拟设备,但不适用于我的真实设备(小米 Poco X3 Pro API 30)或 Nexus 6 API 30 虚拟设备。我很困惑
标签: java android oauth-2.0 appauth