2013-05-24 5 views
1

Моя организация использует OpenAM SSO для аутентификации, и мое приложение написано в Pyramid. Идентификатор пользователя передается в HTTP-заголовке. Я также могу настроить его для передачи групп и разрешений, которые я могу использовать в acl. Это делает аутентификацию в пирамиде избыточной. Можно ли вообще отказаться от Политики аутентификации и идти только с авторизацией?Pyramid: Можно ли использовать авторизацию без аутентификации?

+2

Наличие имени пользователя, переданного как заголовок, является всего лишь типом аутентификации. –

ответ

4

Вам нужен способ рассказать системе авторизации пирамиды, кем является человек (их эффективные принципы). Это ответственность за политику аутентификации, даже если это так просто, как разбор заголовка.

class CustomAuthenticationPolicy(object): 
    def effective_principals(self, request): 
     principals = [Everyone] 

     identity = request.headers.get('x-identity') 
     # validate the identity somehow 
     if is_valid(identity): 
      principals += [Authenticated, identity, 'g:editors'] 
     return principals 

config.set_authentication_policy(CustomAuthenticationPolicy()) 
+0

Я использовал ваше решение и смог решить проблему. Первоначально он жаловался, что 'CustomAuthenticationPolicy' не имеет атрибута' unauthenticated_userid'. Поэтому я добавил этот метод для возврата идентификатора пользователя, и он сработал! Спасибо вам @ michael-merickel. –

+1

Да, мое решение было только для получения разрешения на работу. Если у вас есть другой код, который вызывает 'authenticated_userid' или' unauthenticated_userid', тогда вам нужно определить другие методы. –

Смежные вопросы