.Net - Обмен токеном между двумя webapi на одном и том же IIS - PullRequest
0 голосов
/ 29 июня 2018

У меня есть проект, основанный на Angular2 для FrontEnd и .Net WebApi 2.0 для бэкэнда.

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

Я хочу создать новый webapi 2.0 и разделить токен между двумя webapi, чтобы пользователь не мог указать один и тот же пользователя и пароль при переключении между проектами.

Возможно ли это?

Другое решение - использовать тот же Webapi для project2 и расширить контроллеры / методы, но я хочу создать для него новый проект.

Благодаря поддержке

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

Если ключ подписи JWT одинаков для обоих API, и вы отключаете проверку эмитента, токен будет работать для обоих API.

Пример

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
             .AddJwtBearer(options =>
             {
                 options.TokenValidationParameters = new TokenValidationParameters
                 {
                     ValidateIssuer = false, //this needs to be false 
                     ValidateLifetime = true,
                     ValidateIssuerSigningKey = true,
                     ClockSkew = TimeSpan.Zero,
                     IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("fjboJU3s7rw2Oafzum5fBxZoZ5jihQRbpBZcxZFd/gY="))

                 };
             });

Создание некоторых утверждений (роли - это просто список строк)

public List<Claim> CreateJwtClaims( String UserId, List<String> Roles) 
    {
        // create a list of claims and add userId 
        var Claims = new List<Claim>
        {
            new Claim(ClaimTypes.Name, UserId)
        };
        // add roles to the claims list
        // for every role add a new claim type role
        foreach (var role in Roles)
        {
            Claims.Add(new Claim(ClaimTypes.Role, role));
        }

       return Claims;
    }

создать токен прохождения претензий

 public string CreateToken(List<Claim> Claims)
    {
        // JWT Key must be the same as in startup 

        string JwtSigningKey = "fjboJU3s7rw2Oafzum5fBxZoZ5jihQRbpBZcxZFd/gY=";

        // create a security key
        var Key = new SymmetricSecurityKey(System.Text.Encoding.ASCII.GetBytes(JwtSigningKey));

        // sign the key using specified algorithm
        var Creds = new SigningCredentials(Key, SecurityAlgorithms.HmacSha256);

        // create the token from the signed credentials
        var Token = new JwtSecurityToken(
          issuer: "localhost", // or try setting issues the the same from both
          audience: "localhost",
          claims:Claims // passed claims
          expires: DateTime.Now.AddMinutes(10), //expires in 10 mins
          signingCredentials: Creds);


        return new JwtSecurityTokenHandler().WriteToken(Token);
    }

в вашем контроллере добавить авторизацию

[Authorize] // this says you must have a valid token
// [Authorize(Roles = "admin")]  and must be in role admin created in claims 
[Route("api/[controller]")]
public class ValuesController : Controller
0 голосов
/ 29 июня 2018

Хорошо, если приложение размещено в 2 разных средах, оно будет рассматриваться как 2 разных приложения, однако Load Balancer был введен для работы с несколькими средами.

По отношению к .net: Вы должны искать сеанс Out Proc, так как веб-приложению нужен общий слой для сохранения токена, это может быть БД, общий файл и т. Д., Но это должен быть общий слой.

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

При обоих подходах вы должны создать 1 общий слой.

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