Я хочу интегрировать свое веб-приложение Django с другими веб-продуктами (наиболее вероятная третья сторона non-django приложения.), Как я могу позволить другим сайтам войти в систему свои пользователи на мой сайт с единой точкой входа? Как я сохранил бы имена пользователей и пароли для сторонних пользователей сайтов надежно на моем сайте для входа в систему моих пользователей на 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
Нет ничего плохого в использовании маршаллера 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;
}
Вам необходимо настроить объявление структуры и атрибуты, чтобы они соответствовали данным в файле.
Есть и другие возможности, но я бы не стал потеть над ними, потому что OpenID используется многими людьми и является самым большим в своем роде.
.