gpt4 book ai didi

java - OAuth:App Id 或 redirect_uri 与授权码不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:30 25 4
gpt4 key购买 nike

App Id or redirect_uri does not match authorization code.

由于我对 OAuth 和应用程序开发非常陌生,所以我猜错误(大部分时间)在我这边。我的应用程序有一个按钮(登录),可将用户引导至 Web View ,用户通过 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 以获取访问代码,如果访问代码不可用,请尝试获取 token 。有些人建议在 Activity 将我带到我的 redirect_uri 之前中断该 Activity,但我不知道该怎么做。

基于答案的附加信息:- 在 Misfit 应用程序设置中注册的重定向 URI 是我在代码中使用的重定向 URI。- 我为我的应用程序构建了一个 Intent 处理程序,以便在调用重定向 URI 时启动其主要 Activity 。

==========================================

在 REST 客户端我得到了同样的结果 >>>>

POST: https://api.misfitwearables.com/auth/tokens/exchange

请求:

{
"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"
}

最佳答案

这是一个猜测,但这是一个类似的错误,当您未能在 google api 控制台中注册您的应用程序时,您可能会看到 google。

如果您转到 misfits 控制台并为您的应用注册重定向 url,它应该可以工作:

  1. 登录到 misfits 控制台
  2. 注册新应用或修改现有应用。
  3. 确保应用程序域与您的重定向 URL 匹配

enter image description here

希望对您有所帮助。

关于java - OAuth:App Id 或 redirect_uri 与授权码不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31350502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com