App Id or redirect_uri does not match authorization code.
由于我非常喜欢OAuth和App开发,我猜这个错误(大部分时间都是如此)就在我身边。我的应用程序有一个按钮(登录),可以将用户引导到webview,在那里他通过OAuth登录Misfit API(https://build.misfit.com/)。一旦他同意与我的应用程序分享他的Misfit数据,webview想要将他重定向到我的redirect_uri,但我总是得到上述错误消息。以下是OAuthActivity的代码:
public class OAuthActivity extends Activity {
public static String OAUTH_URL = "https://api.misfitwearables.com/auth/dialog/authorize";
public static String OAUTH_ACCESS_TOKEN_URL = "https://api.misfitwearables.com/auth/tokens/exchange";
public static String CLIENT_ID = "ID";
public static String CLIENT_SECRET = "Secret";
public static String CALLBACK_URL = "http://iss.uni-saarland.de/";
public static String SCOPE = "public,birthday,email,tracking,session,sleeps";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_auth_o);
String url = OAUTH_URL + "?response_type=code" +"&client_id=" + CLIENT_ID + "&redirect_uri=" + CALLBACK_URL + "&scope=" + SCOPE;
WebView webview = (WebView)findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
final SharedPreferences prefs = this.getSharedPreferences(
"com.iss_fitness.myapplication", Context.MODE_PRIVATE);
webview.setWebViewClient(new WebViewClient() {
public void onPageStarted(WebView view, String url, Bitmap favicon) {
String accessTokenFragment = "access_token=";
String accessCodeFragment = "code=";
// We hijack the GET request to extract the OAuth parameters
if (url.contains(accessTokenFragment)) {
// the GET request contains directly the token
String accessToken = url.substring(url.indexOf(accessTokenFragment));
prefs.edit().putString("Token", accessToken);
} else if(url.contains(accessCodeFragment)) {
// the GET request contains an authorization code
String accessCode = url.substring(url.indexOf(accessCodeFragment));
prefs.edit().putString("Code", accessCode);
String query = "grant_type=authorization_code" + "&client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET + "&code=" + accessCode + "&redirect_uri=" + CALLBACK_URL;
view.postUrl(OAUTH_ACCESS_TOKEN_URL, query.getBytes());
}
}
});
webview.loadUrl(url);
}
}
我知道这是以某种方式劫持授权URL以获取访问代码,如果不可用,请尝试获取令牌。有些人建议在我想把我带到redirect_uri之前打断这个活动,但是我不知道该怎么做。
基于答案的其他信息: - Misfit应用程序设置中注册的重定向URI是我在代码中使用的重定向URI。 - 我为我的应用程序构建了一个Intent处理程序,以便在调用重定向URI时启动其主要活动。
==========================================
在REST客户端中,我得到了相同的>>>>
POST: https://api.misfitwearables.com/auth/tokens/exchange
REQUEST:
{
"grant_type":"authorization_code",
"code":{{USER CODE FROM AUTH}},
"redirect_uri":"SAME REDIRECT_URI AS IN AUTH",
"client_id":{{my app id}},
"client_secret":{{my app secret}}
}
响应:
{
"error": "invalid_grant",
"error_description": "App Id or redirect_uri does not match authorization code"
}
答案 0 :(得分:0)
这是一个猜测,但是当您未能在google api控制台中注册您的应用时,您可能会看到谷歌的类似错误。
如果您转到不合适的控制台并为您的应用注册重定向网址,它应该有效:
我希望这会有所帮助。