oauth2.0 如何在React Native中获取Keycloak Auth令牌?

wf82jlnq  于 2023-10-15  发布在  React
关注(0)|答案(3)|浏览(136)

这是我第一次使用keycloak。我正在为我的网站创建一个react本地应用程序,它可以通过keycloak对每个用户进行身份验证。我能够登录并得到一个响应是{"authentication": null, "error": null, "errorCode": null, "params": {"code": "32c1d719-c8ce-4c1b-8800-5a853095da71.3fe7ff3e-feb2-47c9-b101-b24c90d596b4.918d5daa-5b42-4480-8832-3c88c5e876ad", "session_state": "3fe7ff3e-feb2-47c9-b101-b24c90d596b4", "state": "sVF3SdDAYg"}, "type": "success", "url": "exp://10.11.1.10:8081?state=sVF3SdDAYg&session_state=3fe7ff3e-feb2-47c9-b101-b24c90d596b4&code=32c1d719-c8ce-4c1b-8800-5a853095da71.3fe7ff3e-feb2-47c9-b101-b24c90d596b4.918d5daa-5b42-4480-8832-3c88c5e876ad"}
但是我如何获得用于REST API的用户令牌。我的登录代码在这里:

import React, { useEffect, useState } from 'react';
import * as WebBrowser from 'expo-web-browser';
import { useAuthRequest, useAutoDiscovery } from 'expo-auth-session';
import { Button, Text, View } from 'react-native';

WebBrowser.maybeCompleteAuthSession();

export default function LoginPage() {
  const discovery = useAutoDiscovery('https://@@@@@@@@@@@@@@@@@@@@@@@@@');
  const redirectUri = 'exp://10.11.1.10:8081';

  const [accessToken, setAccessToken] = useState();
  const [request, result, promptAsync] = useAuthRequest(
    {
      clientId: 'mywebsite',
      redirectUri: redirectUri,
      scopes: ['openid', 'profile'],
      usePKCE: true,
    },
    discovery,); 

    console.log(result)

  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <Button title="Login!" disabled={!request} onPress={() => promptAsync()} />
      {result && <Text>{JSON.stringify(result, null, 2)}</Text>}
    </View>
  );
}

我试图使用令牌restapi端点与密钥,但我得到错误没有令牌..

d7v8vwbk

d7v8vwbk1#

我们可以使用/token端点从keycloak获取一个访问令牌,如果你在点击这个API时出错,然后检查我们发送client_id、client_secret、grant_type、username和password所需的body参数。

ljsrvy3e

ljsrvy3e2#

我也有同样的问题托马斯。当你使用pkce时,你在登录时向Keycloak发送一个codeChallenge,然后你会收到授权代码,你需要用codeVerifier(原始代码转换成codeChallenge)发送回来。
问题是...我不知道怎么做!
编辑:我发现了一些东西:Authsession有一个字体:AuthSession.exchangeCodeAsync(config,discovery)
我找到了一个代码示例:https://gist.github.com/lemmensaxel/72ece5cd00026cc05888701d7d65fbe0
在你收到这个json之后,这个函数被调用,然后它发送回代码验证器,你得到一个访问令牌:)
我正在努力

am46iovg

am46iovg3#

我有一个成功感谢这个人和他的代码!
https://gist.github.com/lemmensaxel/72ece5cd00026cc05888701d7d65fbe0
这是唯一的github,清楚地解释了如何在RN中使用keycloak设置身份验证。
我有一个最后的错误与android,我需要修复,但它的确定!
欢呼

相关问题