我正在开发一个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上检索变量? “隐式流程”是在移动应用程序上使用的方式吗?
答案 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)