AWS Amplify Auth Login 从 React Native 上的 React Native Webview

Posted

技术标签:

【中文标题】AWS Amplify Auth Login 从 React Native 上的 React Native Webview【英文标题】:AWS Amplify Auth Login from React Native Webview on React Native 【发布时间】:2020-08-21 22:57:24 【问题描述】:

我正在开发一个在 web 视图中加载 example.com 的 React Native 应用程序。我想知道使用 postMessage 将用户名和密码从 React Native webview 传递给 React Native 是否安全。你觉得没问题还是不安全?

这是向 React Native 发送用户名和密码的网络应用程序(example.com)

这是 React Native <WebView onMessage=m => this._onMessage(m) /> 接收该用户名和密码以验证用户。

似乎它会起作用,但不确定它是否安全。如果没有,有没有办法从 React Native webview 对 React Native 中的用户进行身份验证?

【问题讨论】:

【参考方案1】:

根据MDNpostMessage方法是安全的,但是请参考security concern部分。

您可以发送用户会话而不是 username/password 对。

您的代码如下所示:

// in webb app
const sendSession = async() => 
  const session = await Auth.currentSession()
  const data = 
    idToken: session.getIdToken().getJwtToken(),
    accessToken: session.getAccessToken().getJwtToken(),
    refreshToken: session.getRefreshToken().getToken(),
  
  window.ReactNativeWebView?.postMessage(JSON.stringify(data))


// in mobile app
const _onMessage = (event) => 
  const data = JSON.parse(event.nativeEvent.data)
  const 
    idToken,
    accessToken,
    refreshToken
   = data
  const userPool = new CognitoUserPool(
    UserPoolId: 'UserPoolId',
    ClientId: 'ClientId',
  )
  const cognitoIdToken = new CognitoIdToken(
    IdToken: idToken,
  )
  const cognitoAccessToken = new CognitoAccessToken(
    AccessToken: accessToken,
  )
  const cognitoRefreshToken = new CognitoRefreshToken(
    RefreshToken: refreshToken,
  )
  const username = cognitoIdToken.payload['cognito:username'] // or whatever you need to get from playload as a username
  const user = new CognitoUser(
    Username: username,
    Pool: userPool,
  )
  user.setSignInUserSession(
    new CognitoUserSession(
      AccessToken: cognitoAccessToken,
      IdToken: cognitoIdToken,
      RefreshToken: cognitoRefreshToken,
    ),
  )

【讨论】:

以上是关于AWS Amplify Auth Login 从 React Native 上的 React Native Webview的主要内容,如果未能解决你的问题,请参考以下文章

模拟适用于 Android 的 AWS Amplify Auth API

aws-amplify auth currentSession 不返回当前用户

AWS amplify add auth:如何在执行 amplify cli 后添加重定向登录 URI

AWS Amplify AppSync GraphQL @Auth 指令:如何禁止为公共用户列出元素

Auth.signIn() 使用设备 - AWS Amplify 与 React-Native

使用 AWS Amplify Auth 和 GraphQL API,您将如何进行一些公共和一些私有查询/突变调用?