2009-07-19 4 views
1

사이트를 디자인하고 있습니다. 매우 초기 단계에 있으며 서버에서 제공하는 SingleSignOn 서비스를 사용할지 여부를 결정해야합니다. (그것은 캠퍼스 사이트이고 점점 더 많은 사이트가 여기 SSO를 사용하므로 일반적으로 좋은 생각입니다). 대상 플랫폼은 아마도 mod_wsgi를 통해 django가 될 것입니다. 그러나이 서비스와 함께 제공된 설명서에는 PHP 코드가 있습니다. 이 방법은 주로 사용자 정의 $_SERVER['HTTPsomething'] 변수를 사용합니다. 불행히도, 지금은이 환경에 접근 할 수 없습니다.

(사용자 의견) 장고에서이 맞춤 변수에 어떻게 액세스 할 수 있습니까? WSGI 설명서에 따르면 environ 변수에는 가능한 많은 변수가 포함되어야합니다. 내가 그들에게 접근 할 수 있다고 확신 할 수 있습니까?

답변

5

는, 서버 환경 변수가 request 개체에 META 속성의 사전 구성원으로 제공됩니다 - foo는 변수의 이름입니다보기에, 당신은 항상 request.META['foo']를 통해 액세스 할 수 있도록.

사용할 수있는 것을 쉽게 볼 수있는 방법은 오류를 유발하는 assert False을 포함하는보기를 만드는 것입니다. DEBUG=True을 실행하는 동안 모든 request 속성의 전체 목록을 비롯하여 서버 상태에 대한 많은 정보가 포함 된 멋진 오류 페이지가 표시됩니다.

0

글쎄, $ _SERVER는 PHP입니다. WSGI를 통해 동일한 변수에 액세스 할 수는 있지만 SSO의 작동 방식을 정확하게 파악해야하므로 이러한 변수 (아마도 Apache)가 무엇인지 파악하고 액세스 할 수 있습니다.

또는 직접 액세스하고 사용해 볼 수 있습니다. :) 장고에서

3

원시 WSGI 환경에서 전달 된 변수 집합을 확인하려면 장고가 수행하기 전에 장고 항목 대신 WSGI 스크립트 파일에 다음 코드를 입력하십시오.

import StringIO 

def application(environ, start_response): 
    headers = [] 
    headers.append(('Content-type', 'text/plain')) 

    start_response('200 OK', headers) 

    input = environ['wsgi.input'] 
    output = StringIO.StringIO() 

    keys = environ.keys() 
    keys.sort() 
    for key in keys: 
     print >> output, '%s: %s' % (key, repr(environ[key])) 
    print >> output 

    length = int(environ.get('CONTENT_LENGTH', '0')) 
    output.write(input.read(length)) 

    return [output.getvalue()] 

그러면 키/값 쌍의 집합이 브라우저에 다시 표시됩니다.

SSO 메커니즘 작동 방식을 찾는 것이 중요합니다. 의미있는 일을하는 경우 REMOTE_USER 및 AUTH_TYPE 변수를 설정할 수 있습니다. REMOTE_USER가 설정되면 변수에 지정된 사용자가 Apache의 상위 인증 메커니즘에 의해 인증되었음을 나타내는 표시기입니다. 이러한 변수는 일반적으로 HTTP 기본 및 다이제스트 인증에 대해 설정되지만 최대한 많은 시스템 (SSO 메커니즘)에서도 사용할 수 있도록 설정해야합니다.

http://docs.djangoproject.com/en/dev/howto/auth-remote-user/

다음 장고가 높은 수준에서 이루어 인증을 수락해야하는 데 사용할 수 있습니다 그들이 설정 한 경우

, 다음에 설명 장고 기능이있다.

SSO 메커니즘이 REMOTE_USER를 사용하지 않고 대신 사용자 지정 헤더를 사용하는 경우 전체 Django 응용 프로그램의 사용자 지정 WSGI 래퍼를 사용하여 모든 사용자 지정 헤더를 DEMO가 사용할 수있는 적절한 REMOTE_USER 값으로 변환 할 수 있습니다 .

+0

고맙습니다. 매우 유익했습니다. –