Добавить претензии в токене от веб-API - PullRequest
0 голосов
/ 29 ноября 2018

Я работаю над проектом с использованием IdentityServer4, Identity и API.

API защищен с помощью IDS4.

API и IDS4 находятся в одном проекте, поэтому я имею3 проекта в моих решениях: - веб-проект MVC, содержащий IdentityServer и API - реализация Identity, использующая MongoDB в качестве поставщика базы данных - консольное приложение, имитирующее клиента

Мой клиент аутентифицируется с помощью IDS4, получаетaccess_token, а затем вызвать API с токеном.Эта часть работает нормально.

Теперь меня спрашивают, что при вызове определенного действия в моем API я добавляю некоторые претензии к токену.

Я искал в Google, но могу 'Я не нашел решений о том, как это сделать, и я не уверен, что это хорошая идея.Может ли API изменить полученный токен доступа, добавив некоторые утверждения и затем отправив обратно токен?

В качестве альтернативы можно было отправить другой токен в качестве ответа, но я не могу найти способ подписать свой токен с помощью RS512.

Заранее спасибо

1 Ответ

0 голосов
/ 05 декабря 2018

Вы можете добавить дополнительные претензии, используя IProfileService

public class ProfileService : IProfileService
{
    public Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
        string subject = context.Subject.Claims.ToList().Find(s => s.Type == "sub").Value;
        try
        {
            // Get Claims From Database, And Use Subject To Find The Related Claims, As A Subject Is An Unique Identity Of User
            //List<string> claimStringList = ......
            if (claimStringList == null)
            {
                return Task.FromResult(0);
            }
            else {
                List<Claim> claimList = new List<Claim>();
                for (int i = 0; i < claimStringList.Count; i++)
                {
                    claimList.Add(new Claim("role", claimStringList[i]));
                }
                context.IssuedClaims = claimList.Where(x => context.RequestedClaimTypes.Contains(x.Type));
                return Task.FromResult(0);
            }
        }
        catch
        {
            return Task.FromResult(0);
        }
    }

    public Task IsActiveAsync(IsActiveContext context)
    {
        return Task.FromResult(0);
    }
}

Регистрация службы в файле «Автозагрузка»:

public void ConfigureServices(IServiceCollection services)
{
    services.AddIdentityServer()..Services.AddTransient<IProfileService, ProfileService>();
}
...