Плагин OAuth2 для входа в систему с использованием токенов обновления

У меня есть мобильное приложение, в котором я пытаюсь аутентифицировать пользователя с помощью плагина nativescript-oauth2 с настраиваемыми поставщиками, использующими Azure B2C. Мое требование состоит в том, что я хочу, чтобы пользователь впервые вошел в приложение, используя свои учетные данные. После того, как пользователь успешно вошел в систему, мне нужно сохранить токен обновления пользователя и использовать этот сохраненный токен обновления для аутентификации, когда пользователь в следующий раз войдет в мобильное приложение. Используя токены обновления, я хочу снова сгенерировать все токены.

Я попытался использовать метод refreshTokenWithCompletion(), предоставляемый плагином, но, поскольку в документе указано, что это для обновления токенов доступа (Плагин OAuth 2 для NativeScript).


comment
Не могли бы вы пояснить, что именно вы подразумеваете под всеми другими токенами? Маркер доступа должен помочь вам получить доступ ко всему, что было ранее разрешено.   -  person Manoj    schedule 20.02.2020
comment
@Manoj, под всеми остальными токенами я имел в виду НОВЫЙ токен обновления, токен идентификатора и токен доступа. Итак, когда я получу токен обновления, я сохраню его на стороне клиента, и в следующий раз, когда пользователь захочет войти в приложение, использовать сохраненный токен обновления и отправить его в Azure B2C, получить новый доступ и обновить token..Всего этого я хочу добиться с помощью плагина nativescript oauth-2. То же самое можно сделать с помощью почтальона.   -  person Shraddha    schedule 21.02.2020
comment
Вы получаете их все из объекта ITnsOAuthTokenResult, это параметр обратного вызова метода refreshTokenWithCompletion. Вы пробовали это? Если да, то какой вам не хватает?   -  person Manoj    schedule 21.02.2020


Ответы (1)


У меня тоже есть проблема с получением свежих результатов токена с помощью «refreshTokenWithCompletion».

ниже мой код

import { TnsOAuthClient, ITnsOAuthTokenResult, configureTnsOAuth } from 'nativescript-oauth2';
import { AuthProvider } from './auth-provider.service';
import { TnsOaUnsafeProviderOptions } from 'nativescript-oauth2/providers/providers';

@Injectable({
  providedIn: 'root'
})
export class AuthService {

  private client: TnsOAuthClient = null;
  private customProvider: AuthProvider = null;

  private customProviderOptions: TnsOaUnsafeProviderOptions = {
    openIdSupport: "oid-none",
    clientId: "",
    redirectUri: "https://b2clogin.com/te/XXXXXXXXXXXXXX/XXXXXX_XXXXX_XXXXX/oauth2/authresp",
    scopes: ["openid https://XXXXXXXXXXXXXX.onmicrosoft.com/mobileapi/user_impersonation offline_access"],
    clientSecret: "",
    customQueryParams: {
      "p": "XXXXXX_XXXXX_XXXXX",
      "nonce": "defaultNonce",
      "response_mode": "query",
      "prompt": "login"
    }
};

  constructor() {
    this.customProvider = new AuthProvider(this.customProviderOptions);
    configureTnsOAuth([this.customProvider]);
   }

  public Login(providerType): Promise<ITnsOAuthTokenResult> {

    console.log('In Login');

    this.client = new TnsOAuthClient(providerType);

    return new Promise<ITnsOAuthTokenResult>((resolve, reject) => {
      this.client.loginWithCompletion((tokenResult: ITnsOAuthTokenResult, error) => {
          if (error) {
            console.error("back to main page with error: ");
            console.error(error);
            // reject(error);
          } else {
            console.log("back to main page with access token: ");
            console.log(tokenResult);
            // resolve(tokenResult);
          }
        });
    });
  }

  public Logout(): Promise<any> {

    return new Promise<any>((resolve, reject) => {
      if (this.client) {
        this.client.logoutWithCompletion((error) => {
            if (error) {
              console.error("back to main page with error: ");
              console.error(error);
              reject(error);
            } else {
              console.log("back to main page with success");
              resolve();
            }
          });
      }
      else {
        console.log("back to main page with success");
        resolve();
      }
    });

  }

  public RefreshAccess() {

    this.client.refreshTokenWithCompletion((tokenResult: ITnsOAuthTokenResult, error) => {
      if (error) {
        console.error("Unable to refresh token with error: ");
        console.error(error);
      } else {
        console.log("Successfully refreshed access token: ");
        console.log(tokenResult);
      }
    });

  }

}

Пожалуйста, дайте мне знать, если есть какие-либо исправления,

Ошибка: Uncaught (в обещании): URIError: URI неверный формат

Я использую Azure AD B2C для управления идентификацией.

person Application Testing    schedule 24.02.2020