Я пытаюсь разработать доказательство концепции с использованием веб-сайта моей компании в качестве сервера авторизации OAuth, который будет использоваться Umbraco через OWIN/Katana. Вся сантехника OAuth работает очень хорошо, но Umbraco не превращает внешнюю идентичность в локальную идентичность. Вместо входа в бэкэнд Umbraco пользователь возвращается на страницу входа. Единственное изменение после завершения потока OAuth заключается в том, что Umbraco создал файл cookie UMB_EXTLOGIN, содержащий длинную зашифрованную строку.Как преобразовать внешний идентификатор OAuth в локальный идентификатор в Umbraco?
Если я использую локальную идентификацию напрямую (например, имя пользователя и пароль на странице входа в систему Umbraco), Umbraco создает 4 файла cookie: UMB_UCONTEXT, UMB_UPDCHK, XSRF-TOKEN и XSRF-V. Я предполагаю, что у меня отсутствует то, что преобразует внешнюю идентичность в локальную, но я не уверен, что это такое.
Startup.Auth.cs
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.ConfigureBackOfficeMyCompanyAuth(Properties.Settings.Default.ClientId, Properties.Settings.Default.ClientSecret);
}
}
UmbracoMyCompanyAuthExtensions.cs
public static class UmbracoMyCompanyAuthExtensions
{
public static void ConfigureBackOfficeMyCompanyAuth(this IAppBuilder app, string clientId, string clientSecret,
string caption = "My Company", string style = "btn-mycompany", string icon = "fa-rebel")
{
var options = new MyCompanyAuthenticationOptions
{
ClientId = clientId,
ClientSecret = clientSecret,
SignInAsAuthenticationType = Constants.Security.BackOfficeExternalAuthenticationType,
Provider = new MyCompanyAuthenticationProvider(),
CallbackPath = new PathString("/MyCompanySignIn")
};
options.ForUmbracoBackOffice(style, icon);
options.Caption = caption;
app.UseMyCompanyAuthentication(options);
}
}
MyCompanyAuthenticationExtension.cs
public static class MyCompanyAuthenticationExtensions
{
public static IAppBuilder UseMyCompanyAuthentication(this IAppBuilder app, MyCompanyAuthenticationOptions options)
{
if (app == null)
{
throw new ArgumentNullException("app");
}
if (options == null)
{
throw new ArgumentNullException("options");
}
app.Use(typeof(MyCompanyAuthenticationMiddleware), new object[] { app, options });
return app;
}
public static IAppBuilder UseMyCompanyAuthentication(this IAppBuilder app, string clientId, string clientSecret)
{
MyCompanyAuthenticationOptions options = new MyCompanyAuthenticationOptions
{
ClientId = clientId,
ClientSecret = clientSecret
};
return app.UseMyCompanyAuthentication(options);
}
}
Моя пользовательская реализация AuthenticationHandler<T>.AuthenticateCoreAsync()
возвращает AuthenticationTicket со следующими утверждениями и свойствами.
Иски
- GivenName = My First Name
- FamilyName = Моя Фамилия
- Name = полное имя
- Электронная почта = Мой адрес электронной почты
Свойства
- .redirect =/Umbraco/