Android中带有客户端ID和客户端密钥的Retrofit2 OAuth2-401未经授权的错误

时间:2020-05-22 21:09:35

标签: android kotlin oauth-2.0 retrofit2

当我尝试通过改造获得带有客户ID的令牌,客户秘密密钥和授权代码时。我收到 401未经授权的错误

MainActivity.kt

if (appLinkData != null && appLinkData.toString().startsWith("https://abc.abconline.com/plugin/callback")) {
        val code = appLinkData.getQueryParameter("code")
        //     Toast.makeText(this, code, Toast.LENGTH_SHORT).show()

        val builder = Retrofit.Builder().baseUrl("https://abc.abcOnline.com")
            .addConverterFactory(GsonConverterFactory.create()).build()
        val client = builder.create(restClient::class.java)
        client.getAccessToken(
            clientId,
            clientSecret,
            code,
            "Authorization"
        ).enqueue(object : Callback<AccessToken> {
            override fun onFailure(call: Call<AccessToken>, t: Throwable) {
                Toast.makeText(applicationContext, "Falied: $t.message", Toast.LENGTH_SHORT)
                    .show()

            }

            override fun onResponse(call: Call<AccessToken>, response: Response<AccessToken>) {
                Toast.makeText(
                    applicationContext,
                    response.body().toString(),
                    Toast.LENGTH_SHORT
                ).show()
            }

RestClient.kt

interface restClient {

@POST("/oauth2/token")
@FormUrlEncoded
fun getAccessToken(
@Field("client_id") clientId: String,
@Field("client_secret") clientSecret: String,
@Field("code") code: String,
@Field("grant_type") grantType: String,
@Field("redirect_uri") redirectUri: String
): Call<AccessToken>

}

我该如何解决? 我花很多时间弄清楚...

谢谢

2 个答案:

答案 0 :(得分:0)

改造不是问题,服务器将返回其响应401 表示呼叫已成功,但可能存在“凭据”问题或“特权”不足的问题,请使用 POSTMAN 来测试响应是否成功,然后实施。

看看401-unauthorized-error

希望有帮助。

答案 1 :(得分:0)

一般来说,将Open Id Connect集成到移动应用程序并不容易。有许多与可用性和可靠性有关的棘手方面。我认为您应该寻找以下品质:

  • 查看API和OAuth消息的能力
  • 使用受人尊敬的主流安全库

如果有帮助,我这里有一些资源可以帮助您进行比较,并且可以运行代码示例。也许您可以针对此类解决方案改编Retrofit?

相关问题