Плагин OAuth2 для входа с использованием токенов refre sh - PullRequest
0 голосов
/ 20 февраля 2020

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

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

1 Ответ

0 голосов
/ 24 февраля 2020

У меня тоже проблема с получением результатов токена fre sh с использованием «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 B2 C для управления идентификацией.

...