Реализация единого входа в ASP.NET на C #

Мне поручено реализовать единый вход для наших клиентов в рамках нашей следующей версии. Поток существует следующим образом:

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

Таким образом, есть два механизма, с помощью которых пользователь может быть аутентифицирован на нашем сайте:

  1. Переход на домашнюю страницу нашего продукта и вход в систему, используя адрес электронной почты / пароль, который мы храним в нашей локальной системе.
  2. Использование единого входа, когда учащийся уже вошел в основную систему школы с идентификатором учащегося и паролем.

Если реализация нашего продукта находится в ASP.NET (в отличие от Java / Ruby), должны ли мы использовать CAS, JOSSO или какой-либо другой сторонний продукт для единого входа? Или в среде .NET есть что-то, что было бы проще для нас, компании .NET?


person Adam Levitt    schedule 13.01.2013    source источник
comment
Если это модель, инициированная поставщиком идентификаторов, эта статья может помочь: IdP -Инициированные веб-приложения asp.net   -  person Peter    schedule 26.12.2014


Ответы (5)


Существует несколько вариантов реализации единого входа для приложения .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 с помощью универсальных поставщиков.

Надеюсь это поможет!

person Shahed C - MSFT    schedule 13.01.2013
comment
Спасибо за помощь! Однако мне интересно, нет ли уже существующих серверов единой регистрации, которые я мог бы использовать для этого вместо написания собственной реализации? Как Йельский CAS или что-то в этом роде? - person Adam Levitt; 14.01.2013
comment
Другой вариант реализации единого входа для приложений ASP.NET и MVC: componentpro.com/saml.net - person Mubin; 08.12.2014
comment
Возможно, я что-то упускаю, но первая ссылка кажется бесполезной. Можно просто взломать строку запроса, чтобы обойти аутентификацию? - person JohnOpincar; 02.04.2015
comment
@JohnOpincar Я тоже об этом подумал ... мне это не кажется очень безопасным? - person Tom Miller; 09.04.2015
comment
Я думал о том же самом. Ни в коем случае, как SSO ДОЛЖНА работать! - person user441521; 23.12.2015
comment
Эта первая ссылка довольно грубая. Во-первых, везде, где он говорит, реальное время замените реальным миром. В конце он подразумевает, что волшебный IsAuthenticatedBySSO в строке запроса следует заменить токеном SAML, который был бы описан в следующей статье. К сожалению (?) Учетная запись пользователя была закрыта, потому что он оскорблял или тролль. - person Nick Westgate; 23.03.2016
comment
да, первая ссылка не очень безопасна. со строкой запроса любой может ввести url с этим параметром и пройти аутентификацию. - person Jay Magwadiya; 29.06.2016

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

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

person Evdzhan Mustafa    schedule 19.10.2016

Есть несколько поставщиков удостоверений с поддержкой единого входа из коробки, а также сторонние ** продукты.

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

Некоторые из инструментов, доступных и с API для .NET:

Если вы решите пойти со своей собственной реализацией, вы можете использовать нижеприведенные фреймворки, классифицированные по языку программирования.

  • C#

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

    • passport-openidconnect (node.js)
    • oidc-provider (node.js)
    • openid-client (node.js)
  • Python

    • pyoidc
    • Провайдер Django OIDC

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

person Alexz    schedule 23.01.2017

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

Подробный обзор системы единого входа UltimateSAML можно найти здесь < / а>

person brunoid    schedule 01.07.2018

[отказ от ответственности: я один из участников]

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

По сути, это всего лишь один короткий файл C #, который вы можете добавить в свой проект (или установить через Nuget) и использовать в своем приложении.

person Alex from Jitbit    schedule 16.04.2020