Аутентифицировать флаттер приложение с помощью keycloak и openid_client - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь аутентифицировать мое приложение для флаттера, чтобы оно пропускало через openid_client

, следуя примеру репо, я написал функцию аутентификации, подобную этой

authenticate() async {

  // parameters here just for the sake of the question
  var uri = Uri.parse('https://keycloak-url/auth/realms/myrealm');
  var clientId = 'my_client_id';
  var scopes = List<String>.of(['openid', 'profile']);
  var port = 4200;
  var redirectUri = Uri.parse('http://localhost:4200');

  var issuer = await Issuer.discover(uri);
  var client = new Client(issuer, clientId);

  urlLauncher(String url) async {
    if (await canLaunch(url)) {
      await launch(url, forceWebView: true);
    } else {
      throw 'Could not launch $url';
    }
  }

  var authenticator = new Authenticator(client,
      scopes: scopes,
      port: port,
      urlLancher: urlLauncher,
      redirectUri: redirectUri);

  var c = await authenticator.authorize();
  closeWebView();

  var token= await c.getTokenResponse();
  print(token);
  return token;
}

когда я вызываю функцию, появляется всплывающее окно веб-просмотра, и я могу войти через keycloak, но когда закрывается всплывающее окно, я получаю эту ошибку при c.getTokenResponse():

Произошло исключение. NoSuchMethodError (NoSuchMethodError: Получатель 'length' был вызван по нулю. Получатель: null Пробный вызов: длина)

проверка учетных данных c, я вижу, что TokenResponse имеет только "состояние", Поля "session_state" и "code"

что мне не хватает?

1 Ответ

0 голосов
/ 24 марта 2020

Мне ответили на github ( ссылка ), поэтому я скопирую решение здесь:


На мобильных устройствах вы должны использовать поток PKCE. Это выбирается автоматически, когда вы опускаете URI перенаправления в конструкторе Authenticator.

Итак, оно должно быть:

var authenticator = new Authenticator(client,
      scopes: scopes,
      port: port,
      urlLancher: urlLauncher,);

Убедитесь, что вы добавили Uri http://localhost:4200/ (включая конечный sh) до Valid Redirect URIs в брелоке.

image

Убедитесь, что вы добавили uri http://localhost: 4200 / (включая конечный сл *) 1023 *) для правильного перенаправления URI в keycloak.

...