Впровадження єдиного входу C # ASP.NET


77

Мені доручено запровадити єдиний вхід для наших клієнтів як частину нашого наступного випуску. Потік існує наступним чином:

  1. Користувач входить в головну портальну систему своєї школи, використовуючи ідентифікатор / пароль учня, надані йому / нею школою.
  2. Користувач натискає посилання на товар моєї компанії.
  3. Користувач автоматично переходить на сторінку інформаційної панелі так, ніби він щойно ввійшов через форму входу на нашому сайті.

Таким чином, існує два механізми, за допомогою яких користувач може пройти аутентифікацію на нашому сайті:

  1. Перехід на домашню сторінку нашого продукту та вхід за допомогою електронної пошти / пароля, які ми зберігаємо в нашій локальній системі.
  2. Використання єдиного входу, коли учень вже ввійшов до головної системи школи за допомогою ідентифікатора та пароля учня.

Якщо наш продукт реалізовано в ASP.NET (на відміну від Java / Ruby), чи слід нам використовувати CAS, JOSSO чи інший продукт стороннього єдиного входу? Або є щось доступне для середовища .NET, що було б простішим для нас як компанії .NET?


Якщо це модель, ініційована постачальником ідентифікаторів, ця стаття може допомогти: Веб-програми asp.net, ініційовані IdP
Пітер,

Відповіді:


55

Існує кілька варіантів реалізації єдиного входу для програми .NET.

Ознайомтеся з такими підручниками в Інтернеті:

Основи єдиного знаку , липень 2012 року

http://www.codeproject.com/Articles/429166/Basics-of-Single-Sign-on-SSO

GaryMcAllisterOnline: ASP.NET MVC 4, ADFS 2.0 та інтеграція сторонніх STS (IdentityServer2) , січень 2013 р.

http://garymcallisteronline.blogspot.com/2013/01/aspnet-mvc-4-adfs-20-and-3rd-party-sts.html

Перший використовує веб-форми ASP.NET, а другий використовує ASP.NET MVC4.

Якщо ваші вимоги дозволяють використовувати сторонні рішення, також розгляньте OpenID. Існує бібліотека з відкритим кодом під назвою DotNetOpenAuth .

Для отримання додаткової інформації прочитайте допис у блозі MSDN Інтеграція OpenAuth / OpenID із наявною програмою ASP.NET за допомогою Universal Providers .

Сподіваюся, це допомагає!


1
Дякую за допомогу! Мені цікаво, чи не існує вже існуючих серверів єдиного входу, які я міг би використовувати для цього, а не писати власну реалізацію? Як CAS у Єльського університету чи щось інше?
Адам Левітт

3
Можливо, я чогось пропускаю, але перше посилання здається досить марним. Ви можете просто зламати рядок запиту, щоб обійти автентифікацію?
JohnOpincar,

1
@JohnOpincar Це теж була моя думка .. не здається мені дуже захищеною?
Том Міллер,

1
Я думав про те саме. Ні в якому разі не слід так працювати SSO!
user441521

1
Це перше посилання досить грубе. Для початку, де б він не говорив "реальний час", замінюйте його "реальним світом". Наприкінці він має на увазі, що магія "IsAuthenticatedBySSO" у рядку запиту повинна бути замінена використанням маркера SAML, що було б описано в наступній статті. На жаль (?) Обліковий запис користувача було закрито, оскільки він "зловживав або був тролем".
Нік Вестгейт

14

Я запізнююсь на вечірку, але для варіанту №1 я б вибрав IdentityServer3 (.NET 4.6 або нижче) або IdentityServer4 (сумісний з Core ).

Ви можете повторно використовувати наявний користувацький магазин у своєму додатку та підключити його до сховища користувачів IdentityServer. Тоді клієнти повинні бути вказані на ваш IdentityServer як постачальник відкритих ідентифікаторів.


11

Існує кілька постачальників ідентифікаційних послуг із підтримкою єдиного входу, також сторонніми продуктами **.

** Єдина проблема продуктів третьої сторони полягає в тому, що вони беруть плату за користувача на місяць, і це може бути досить дорогим.

Деякі доступні інструменти та API для .NET:

Якщо ви вирішите вибрати власну реалізацію, ви можете скористатися наведеними нижче рамками, класифікованими за мовою програмування.

  • C #

    • IdentityServer3 (протоколи OAuth / OpenID, OWIN / Katana )
    • IdentityServer4 (протоколи OAuth / OpenID, ASP.NET Core )
    • OAuth 2.0 від Okta
  • Javascript

    • паспорт-openidconnect (node.js)
    • oidc-провайдер (node.js)
    • клієнт openid (node.js)
  • Python

    • pyoidc
    • Постачальник OIDC Django

Я хотів би піти на додаток IdentityServer4 та ASP.NET Core, це легко налаштовується, і ви також можете додати власного постачальника автентифікації. Він використовує протоколи OAuth / OpenID , які новіші за SAML 2.0 та WS-Federation.


3

UltimateSAML SSO - це сумісний із специфікаціями .NET інструмент OASIS SAML v1.x та v2.0. Він пропонує елегантний та простий спосіб додати підтримку єдиного входу та єдиного виходу SAML до ваших програм ASP.NET, ASP.NET MVC, ASP.NET Core, робочого столу та служби. Легка бібліотека допомагає забезпечити доступ до єдиного входу до хмарних веб-сайтів та веб-сайтів інтрамережі за допомогою одного запису облікових даних.

Детальний огляд UltimateSAML SSO можна знайти тут


1

[застереження: я є одним із авторів]

Ми створили дуже простий компонент безкоштовного / відкритого джерела, який додає підтримку SAML для програм ASP.NET https://github.com/jitbit/AspNetSaml

В основному це лише один короткий файл C #, який ви можете додати у свій проект (або встановити через Nuget) і використовувати його разом із вашим додатком

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.