【问题标题】:react native android oauth2反应原生android oauth2
【发布时间】:2016-05-18 14:15:16
【问题描述】:

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

【问题讨论】:

    标签: android react-native oauth2


    【解决方案1】:

    首先,通过查看其他推荐的内容,您开始查看哪种 oauth2 流类型对您的应用程序最安全。

    之后,我查看了“隐式与密码授权类型”并查找了必填字段:

    https://www.rfc-editor.org/rfc/rfc6749

    我确保一个授权端点是激活的以进行测试(通过使用正确的 grant_type 自己激活一个)接下来我想知道如何填写所有字段。通过安装 postman,我可以自己分析并发出 POST 调用。

    之后,您查找您的网址,在我的情况下是:localhost:8000/oauth/token 并使用邮递员对其进行发布。

    我被困在不能在请求正文上使用 JSON 的部分,而是 oauth 请求需要在 1 个名为“body”的长参数中作为字符串。这就是 httprequest 的工作方式。

    //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 (接下来的步骤。)

    【讨论】:

    • 感谢body: "client_id=sfjwepifjpfweijgpeijSGIOEJOPGIWSJA35340537530708&grant_type=password&username="+username+"&password="+password 我遇到了一个问题,如果我将/ 放在url 的末尾,如果我使用经典标头会抛出404 错误,但当我添加时像这样的身体它起作用了。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-04-22
        • 1970-01-01
        • 2017-02-06
        • 2018-02-08
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多