反应原生android oauth2

时间:2016-05-18 14:15:17

标签: android react-native oauth2

我正在开发一个react-native应用程序,在这个应用程序中我试图使用oauth2进行身份验证。现在我尝试使用webview来检索我的redirect_uri凭据,但我不确定如何在Android设备上以react-native检索它。

我找到了一个例子,但它没有解释如何在变量中获取访问令牌,我不知道如何在react-native中实现它。

为此我试图使用隐式流程。

  

拨款类型:隐含   隐式授权类型用于移动应用程序和Web应用程序(即在Web浏览器中运行的应用程序),其中不保证客户端机密性机密性。隐式授权类型也是基于重定向的流,但访问令牌被提供给用户代理以转发到应用程序,因此它可以暴露给用户和用户设备上的其他应用程序。此外,此流程不会验证应用程序的身份,并依赖于重定向URI(已在服务中注册)来实现此目的。

     

隐式授权类型不支持刷新令牌。   隐式授权流程基本上如下工作:要求用户授权应用程序,然后授权服务器将访问令牌传递回用户代理,用户代理将其传递给应用程序。如果您对细节感到好奇,请继续阅读。   https://www.digitalocean.com/community/tutorials/an-introduction-to-oauth-2

Integrate oauth2 with native (iOS/Android) mobile application

我的问题是我的redirect_uri应该是什么? 如何在react-native Android上检索变量? “隐式流程”是在移动应用程序上使用的方式吗?

3 个答案:

答案 0 :(得分:3)

首先,您可以通过查看其他建议来查看哪个oauth2 flowtype对您的应用程序最安全。

之后,您将查找隐式密码grant_type并查找所需字段:

https://tools.ietf.org/html/rfc6749

确保授权端点处于活动状态(通过使用正确的grant_type使其自己处于活动状态)之后您会想知道如何填写所有字段。通过安装邮递员。在那之后,你查找你的网址,在我的情况下是:localhost:8000/oauth/token并发帖反对。

之后我查找了我需要的字段并尝试制作fetch命令。我被困在脸上,你不能把JSON扔到它,但需要在1长参数体字符串。 x-www-form-urlencoded的方式很有效。

//authorization grant type: Resource owner password-based.
const HOST_ADRESS = "192.168.104.137:8000"; //change with your own host 
const client_id   = "jpijpijpijpijipjipijipijipijipj";
fetch('http://'+HOST_ADRESS+"/oauth/token/", {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Cache-Control': 'no-cache'
    },
    body: "client_id=sfjwepifjpfweijgpeijSGIOEJOPGIWSJA35340537530708&grant_type=password&username="+username+"&password="+password
})
    .then((response) => response.text())
    .then((responseText) => {
        console.log(responseText);
        //redux succed do something.
        //dispatch(actionsCreators.succesLogin(responseText));
    })
    .catch((error) => {
        const data = {error: "A error happened"};
        //redux error.   
        //dispatch(actionsCreators.errorLogin(data));
        console.warn(error);
    });

希望别人能够学到我所采取的步骤。 只需要将令牌保存在数据库中的某个位置以检查(sql lite)或realm.io(yay用于后续步骤。)

答案 1 :(得分:1)

首先,您应该根据您尝试登录的位置选择正确的授权类型。 如果服务是您的,您可以使用授权类型密码。 如果服务是第三方,则可以使用隐式类型。您提供重定向uri,必须在该特定服务中注册,并在用户身份验证后用于重定向用户。 最后,React Native中有一个网络API,您可以使用fetch(请参阅docs)。作为此函数的第二个参数,您可以提供其他信息和标题。您可以在此处设置oAuth2文档中提供的所有必需信息。

答案 2 :(得分:0)

这是一个非常有趣的例子:https://github.com/bartonhammond/reactnative-oauth-hapi