Получить токен с OpenID во флаттере - PullRequest
0 голосов
/ 06 августа 2020

Я хотел бы знать, есть ли способ получить токен доступа через OpenID во Flutter (Dart). Я могу сделать это через Postman, и я также могу использовать WebView во Flutter, однако я бы хотел, чтобы приложение (Android) могло открывать браузер для выполнения всего процесса, пока вы не получите желаемый токен ... просто как в Postman.

С Postman я делаю это так:

1- Запрос 1

2 - Результат 2

Я пытался использовать плагин openid_client со следующим кодом, но мне это не удалось. Это дает мне одну ошибку:

E / flutter (6080): Пробный вызов: contains ("openid")

      authenticate(Uri uri, String clientId, List<String> scopes) async {
    // create the client
    var issuer = await Issuer.discover(uri);
    var client = new Client(issuer, clientId);
    // create a function to open a browser with an url
    urlLauncher(String url) async {
      //String url2 = issuer.metadata['data'].values.first.toString();
      if (await canLaunch(url)) {
        await launch(url, forceWebView: true);
      } else {
        throw 'Could not launch $url';
      }
    }

    // create an authenticator
    var authenticator = new Authenticator(client, scopes: scopes, urlLancher: urlLauncher);
    // starts the authentication
    var c = await authenticator.authorize();
    // close the webview when finished
    closeWebView();
    // return the user info
    return await c.getUserInfo();
  }

(...)

  RaisedButton(
    onPressed: () => authenticate(
        Uri.parse('https://api.worldoftanks.eu/wot/auth/login/?application_id=xxxxxxxxxxxxxxxxxxxxxxxxxxx&nofollow=1'),
        null,
        ['Access Token', 'account_id', 'expires_at', 'nickname']),
    child: Text('OpenID', style: TextStyle(fontSize: 20)),
  )

Может ли мне помочь какой-нибудь блестящий ум? Я в правильном направлении или мне следует перейти к другому решению?

Ответы [ 2 ]

0 голосов
/ 10 августа 2020

Перемещено на FlutterWebAuth с этим кодом:

  void authenticateWebAuth() async {
    // Present the dialog to the user
    final result = await FlutterWebAuth.authenticate(
      url: "https://api.worldoftanks.eu/wot/auth/login/?application_id=XXXe272eXXXac833eXXXf093d032c7fe&display=popup",
      callbackUrlScheme: "",
    );

// Extract token from resulting url
    final token = Uri.parse(result).queryParameters['access_token'];
    print('access_token');
    print(token);
  }

Проблема в том, что он не передает первый оператор (FlutterWebAuth.authenticate). Зная, что access_token находится в URL-адресе ... как это сделать?

Пример

0 голосов
/ 06 августа 2020

Область openid - это обязательная область, которая всегда должна быть включена. Поэтому попробуйте добавить его в список областей, которые вы запрашиваете у службы токенов.

На вашем рисунке параметр scope в первом запросе кажется пустым.

Параметр scope представляет то, к чему вы хотите иметь доступ и какую информацию вы хотите знать от пользователя. Прилагаю картинку с одного из моих учебных классов, описывающую прицелы на высоком уровне:

введите описание изображения здесь

Требуется область действия openid, и часто вы также видите запросы на такие области, как электронная почта и профиль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...