Как включить или отключить аутентификацию с помощью параметра конфигурации или переменной? - PullRequest
1 голос
/ 19 июня 2019

Я хотел бы реализовать переключатель в конфигурации, который позволяет включить (windowsAuth=true) или отключить проверку подлинности Windows (windowsAuth=false), чтобы он использовался как анонимный.

Как этого добиться вВозможно, простой способ или, может быть, есть что-то уже готовое к использованию?

Я попытался отключить следующее.

<system.web>
    <authentication mode = "None" />
    <authorization >
        <allow users="*" />
    </authorization>
</system.web>

Однако после нажатия кнопки «Запрос на попытку» в SwaggerUI по-прежнему появляется окно для пользователя / pw.

Ниже кода

private void SetupPlugins(Container container)
{
    container.Register<IDbConnectionFactory>(c =>
        new OrmLiteConnectionFactory(connString, SqlServerDialect.Provider));

    container.RegisterAs<OrmLiteCacheClient, ICacheClient>();

    container.Resolve<ICacheClient>().InitSchema();

    container.Register<IAuthRepository>(c =>
        new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>()));

    container.Resolve<IAuthRepository>().InitSchema();

    Plugins.Add(new AuthFeature(() => new AuthUserSession(), 
    new IAuthProvider[] {
            new AdGroupAuthProvider(container.Resolve<IActiveDirectoryAuthHelper>(),
            GlobalConfiguration.Instance.AllowedActiveDirectoryGroup)
        }
    ));
}

internal class AdGroupAuthProvider : BasicAuthProvider
{
    private readonly IActiveDirectoryAuthHelper _adLoggingHelper;
    private readonly string _loggedUserAdGroup;

    public AdGroupAuthProvider(IActiveDirectoryAuthHelper loggingHelper, string loggedUserAdGroup)
    {
        _adLoggingHelper = loggingHelper;
        _loggedUserAdGroup = loggedUserAdGroup;
    }
    public override bool Authenticate(IServiceBase loggingServiceBase, string userName, string password)
    {
        return _adLoggingHelper.HasUserAssignedGroup(userName, password, _loggedUserAdGroup);
    }
}

[Authenticate(ApplyTo.Get)]
[Route("/someRoute", "GET")]
public class someRequest { ...}

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Наконец-то я нашел решение для быстрого включения / выключения аутентификации.Мы можем решить это, добавив Аутентифицировать атрибуты динамически.Это также может быть легко изменено для использования другого поставщика аутентификации.

Таким образом, мы можем легко определить с помощью этого атрибута AuthenticateAttribute, если в запросе A, B или C должна быть включена аутентификация или нет.

private void SetupPlugins(Container container, ILog log)
{ ...
    bool activeDirectoryAuthentication = ToBoolean(GlobalConfiguration.Instance.ActiveDirectoryAuthentication);
    ApplyTo applyTo = ApplyTo.Get;
    if (!activeDirectoryAuthentication) applyTo = ApplyTo.None;

    typeof(RequestA).AddAttributes(new AuthenticateAttribute(applyTo));
    typeof(RequestB).AddAttributes(new AuthenticateAttribute(applyTo));
    typeof(RequestC).AddAttributes(new AuthenticateAttribute(applyTo));
    ...
 }
0 голосов
/ 19 июня 2019

Насколько я знаю, невозможно отключить проверку подлинности Windows в коде во время выполнения, поскольку она запускается IIS / ASP.NET до того, как запрос достигает ServiceStack и вашего приложения ASP.NET.

...