Как создать безопасную единую точку входа Django между различными сайтами?

Я хочу интегрировать свое веб-приложение Django с другими веб-продуктами (наиболее вероятная третья сторона non-django приложения.), Как я могу позволить другим сайтам войти в систему свои пользователи на мой сайт с единой точкой входа? Как я сохранил бы имена пользователей и пароли для сторонних пользователей сайтов надежно на моем сайте для входа в систему моих пользователей на 3-и сайты части?

12
задан MikeN 20 December 2009 в 15:55
поделиться

3 ответа

Некоторые еще идеи ...

OAUTH

OAUTH для приложения для неинтеграфона. Django Projects: Django-Oauth и Django-Oauth-Thumenter . Статья: ОАУТ В ДЖАГО

SAML

Язык разметки безопасности безопасности (SAML) - это больше для корпоративных приложений, потому что он дает «предприятие» более контроля над своими собственными пользователями, и какие из тех пользователей могут получить доступ к приложению. Этот протокол - это (был?) В основном управляемый Google и друзьями (E.g. Salesforce.com).

Статьи: Сервис SAML Однозначный вход (SSO) для Google Apps и Demystingify Saml .

Python Projects: Pysaml и Сообщение блога

Интеграция Django: SAML с Django (не полное решение ... просто отправная точка. Использует Pysaml)

Информационные карты

IIRC Информационные карты - это Microsoft Universe, эквивалентная SAML. Python Projects: Обработка информационной карты Python и информационные карты для Python . Ничего для Джанго, насколько я знаю.

- Отредактирование -

Также есть CAS ( Руководство пользователя ), которые могут быть интегрированы с Django-Cas .

И еще два санте-проекта, которые я забыл о: Gheimdall2 и Python-Saml2

11
ответ дан 2 December 2019 в 19:54
поделиться

Нет ничего плохого в использовании маршаллера P / Invoke, он небезопасен, и вам не нужно использовать ключевое слово unsafe. Если вы сделаете это неправильно, вы получите неверные данные. Это может быть намного проще в использовании, чем явное написание кода десериализации, особенно когда файл содержит строки. Вы не можете использовать BinaryReader.ReadString (), он предполагает, что строка была написана BinaryWriter. Однако убедитесь, что вы объявляете структуру данных с помощью объявления struct, this.GetType () вряд ли сработает хорошо.

Вот общий класс, который заставит его работать для любого объявления структуры:

  class StructureReader<T> where T : struct {
    private byte[] mBuffer;
    public StructureReader() {
      mBuffer = new byte[Marshal.SizeOf(typeof(T))];
    }
    public T Read(System.IO.FileStream fs) {
      int bytes = fs.Read(mBuffer, 0, mBuffer.Length);
      if (bytes == 0) throw new InvalidOperationException("End-of-file reached");
      if (bytes != mBuffer.Length) throw new ArgumentException("File contains bad data");
      T retval;
      GCHandle hdl = GCHandle.Alloc(mBuffer, GCHandleType.Pinned);
      try {
        retval = (T)Marshal.PtrToStructure(hdl.AddrOfPinnedObject(), typeof(T));
      }
      finally {
        hdl.Free();
      }
      return retval;
    }

A пример объявления структуры данных в файле:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
struct Sample {
  [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 42)]
  public string someString;
}

Вам необходимо настроить объявление структуры и атрибуты, чтобы они соответствовали данным в файле.

3
ответ дан 2 December 2019 в 19:54
поделиться

http://openid.net/

Есть и другие возможности, но я бы не стал потеть над ними, потому что OpenID используется многими людьми и является самым большим в своем роде.

.
3
ответ дан 2 December 2019 в 19:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: