Как прочитать токен jwt из внешнего API для аутентификации пользователя и вставить имя пользователя и идентификатор электронной почты в базу данных - PullRequest
0 голосов
/ 09 мая 2019

Я просмотрел много статей и SO Q & A, чтобы найти решение моей проблемы. Ниже мое требование

  1. Как только пользователь просматривает угловое приложение, мне нужно пройти аутентификацию и получить имя пользователя и адрес электронной почты.
  2. Аутентификация достигается через внешнюю систему, в основном Api, которая возвращает токен jwt, и после декодирования мы получим информацию в виде json. enter image description here

Мой вопрос: где я могу вызвать API в угловом приложении (front end) или в ядре asp.net (back end). Я звоню на основной конец asp.net, так как мне нужно, чтобы имя пользователя и адрес электронной почты были извлечены и сохранены.

  1. Так что, если я вызываю api на уровне ядра .net, находится ли он в startup.cs?, Если да, как декодировать или использовать jwt, извлечь информацию и вставить в db.

Попытка найти решение, но везде проверка подлинности выполняется либо на одном уровне приложений, либо с использованием внешних поставщиков, таких как Google, Twitter и т. Д. Любая помощь будет по достоинству оценена.

1 Ответ

0 голосов
/ 09 мая 2019

Если вы получаете JTW во внешнем интерфейсе, вы можете проверить токен в .NET Core.Проходите через какой-либо внешний пакет проверки от Microsoft или с вашим собственным кодом.

Если вы хотите проверить токен самостоятельно, вы делаете это в разделе конфигурации, например:

public void ConfigureServices(IServiceCollection services)
{
      // authentication with JWT
      services
        .AddAuthentication(o => o.DefaultScheme = JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(cfg =>
        {
             cfg.Authority = Configuration["Authentication:Authority"];
             cfg.Audience = Configuration["Authentication:ClientId"];

             cfg.TokenValidationParameters = new TokenValidationParameters()
             {
                 ValidateLifetime = true,
                 ValidateAudience = true,
                 ValidateIssuer = true,
                 RequireExpirationTime = true,
                 RequireSignedTokens = true
             };
        });
...

Не забудьте указать, кому вы доверяете (athority и client id), если вы используете Azure Active Directory - вы получаете информацию оттуда.

Это выглядит примерно так:

  "Authentication": {
    "Authority": "https://login.microsoftonline.com/xxxxx-3602-4cdc-95de-55459c981858/v2.0",
    "AppIdUri": "https://<your_ad_name>.onmicrosoft.com/xxxxxx-1bf9-4178-a672-4a1ce52d381a",
    "ClientId": "xxxxxx-2095-4202-b75e-ef4f7a0f7ab5"
  }

И дляпередняя часть в угловой, вы можете добавить что-то, называемое перехватчиком, который будет добавлять JWT в качестве заголовка к вашим исходящим запросам.

Примерно так:

import {
  HttpInterceptor,
  HttpRequest,
  HttpHandler
} from "@angular/common/http";
import { Injectable } from "@angular/core";
import { AuthService } from "../auth.service";

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
  constructor(private authService: AuthService) {}

  intercept(req: HttpRequest<any>, next: HttpHandler) {
    const authToken = this.authService.getToken();
    const authRequest = req.clone({
      //adds header authorization: Bearer QWERTYUIOP... to every outgoing request
      headers: req.headers.set("Authorization", "Bearer " + authToken)
    });

    return next.handle(req);
  }
}

Также еслиВы хотите защитить страницы в угловом приложении, используйте то, что называется охранниками.

Вот некоторые ресурсы:

И, возможно, взгляните на Identity Server, если у вас есть время: https://identityserver.io/

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