IdentityServer4 все еще позволяет ResourceAuthorize? - PullRequest
0 голосов
/ 18 февраля 2020

Я смотрю на обновление с IdentityServer3 до IdentityServer4, особенно потому, что мы обновляем существующие проекты с. NET 4.5 до. NET Core 3.1.

Самая большая проблема, которую я вижу сейчас, заключается в том, что мы используем атрибут ResourceAuthorize, чтобы проверить, есть ли у пользователя разрешение на ресурс

[ResourceAuthorize("Read","urn://someresource")]

Но, просматривая документацию ID4 и базу кода, не похоже, что ResourceAuthorize существует. В документации приведены примеры использования Authorize, но я не вижу ничего, что позволяло бы мне проверять разрешение для ресурса.

Изменилась ли парадигма или есть другой способ выполнить этот тип проверки с помощью ID4?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Вы можете добавить политики:

Startup.cs

    services.AddAuthorization(authorizationOptions =>
        {
            authorizationOptions.AddPolicy(
                "SomePolicy",
                policyBuilder =>
                {
                    policyBuilder.RequireAuthenticatedUser();
                    policyBuilder.AddRequirements(
                            new SomePolicyRequirement());
                });

        });

SomePolicyRequirement.cs

public class SomePolicyRequirement : IAuthorizationRequirement
{
    public SomePolicyRequirement()
    {

    }
}

SomePolicyHandler.cs

public class SomePolicyHandler : AuthorizationHandler<SomePolicyRequirement>
{
    public SomePolicyHandler()
    {

    }

    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, SomePolicyRequirement requirement)
    {
        var endpoint = context.Resource as Endpoint;
        if (endpoint == null)
        {
            context.Fail();
            return Task.CompletedTask;
        }

        /*
        //RouteData can be controller, action or id
        var imageId = filterContext.RouteData.Values["id"].ToString();

        if (!Guid.TryParse(imageId, out Guid imageIdAsGuid))
        {
            context.Fail();
            return Task.CompletedTask;
        }*/

        /*
        //Repository check can go here
        var ownerId = context.User.Claims.FirstOrDefault(c => c.Type == "sub").Value;

        if (!_someRepository.IsImageOwner(imageIdAsGuid, ownerId))
        {
            context.Fail();
            return Task.CompletedTask;
        }*/

        // all checks out
        context.Succeed(requirement);
        return Task.CompletedTask;
    }
}
0 голосов
/ 25 февраля 2020
Ядро

Do tnet добавило несколько отличных функций для авторизации. Авторизация базы ресурсов может быть реализована очень просто с авторизацией на основе политик.

Авторизация на основе политик

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