Фон
Я довольно новичок в Umbraco, но пытаюсь использовать IdentityServer4 для BackOffice of Umbraco. Для IDP я использовал конфигурацию в памяти (шаблон is4inmem), найденную здесь .
Для Umbraco я использовал UmbracoIdentityExtensions для настройки OpenId Connect .
Я в основном следовал этому учебнику (однако для Umbraco 7).
Проблема
У меня есть кнопка «Войти через OpenId connect», которую я настроил, но когда я пытаюсь войти в систему, используя IDP, Umbraco не входит в систему. Я продолжаю возвращаться на страницу входа. Однако, когда я go захожу на страницу IDP, я захожу в систему и вижу, что мне предоставлен доступ, как показано на рисунке ниже.
Всякий раз, когда я вхожу в систему с учетной записью Umbraco, а затем пытаюсь «связать вашу учетную запись OpenId Connect», она ничего не делает, но при выходе из системы появляется сообщение об ошибке в Экран: «Произошла ошибка, не удалось получить информацию о внешнем входе в систему» Я пытался использовать другие параметры конфигурации, но безуспешно.
Код
Конфигурация IDP. cs
public static IEnumerable<IdentityResource> Ids =>
new IdentityResource[]
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email(),
new IdentityResource(
name: "application.profile",
displayName: "Application profile",
claimTypes: new[] { ClaimTypes.GivenName, ClaimTypes.Surname }
)
};
... etc ...
public static IEnumerable<Client> Clients =>
new Client[]
{
new Client
{
ClientId = "u-client-bo",
ClientSecrets = new List<Secret>
{
new Secret("secret".Sha256()),
},
ClientName = "Umbraco Client",
AllowedGrantTypes = GrantTypes.Hybrid,
RequireConsent = false,
RedirectUris = { "https://localhost:44302/Umbraco" },
PostLogoutRedirectUris = { "https://localhost:44302/Umbraco" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email,
"application.profile",
},
AllowAccessTokensViaBrowser = true,
AlwaysIncludeUserClaimsInIdToken = false
}
};
Для Umbraco я отредактировал UmbracoCustomOwinStartup следующим образом:
public class UmbracoCustomOwinStartup : UmbracoDefaultOwinStartup
{
protected override void ConfigureUmbracoUserManager(IAppBuilder app)
{
app.ConfigureUserManagerForUmbracoBackOffice(
Services,
Mapper,
UmbracoSettings.Content,
GlobalSettings,
global::Umbraco.Core.Security.MembershipProviderExtensions.GetUsersMembershipProvider().AsUmbracoMembershipProvider());
}
protected override void ConfigureUmbracoAuthentication(IAppBuilder app)
{
app
.UseUmbracoBackOfficeCookieAuthentication(UmbracoContextAccessor, RuntimeState, Services.UserService, GlobalSettings, UmbracoSettings.Security, PipelineStage.Authenticate)
.UseUmbracoBackOfficeExternalCookieAuthentication(UmbracoContextAccessor, RuntimeState, GlobalSettings, PipelineStage.Authenticate)
.UseUmbracoPreviewAuthentication(UmbracoContextAccessor, RuntimeState, GlobalSettings, UmbracoSettings.Security, PipelineStage.Authorize);
var identityOptions = new OpenIdConnectAuthenticationOptions
{
ClientId = "u-client-bo",
SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
Authority = "https://localhost:44393",
RedirectUri = "https://localhost:44302/Umbraco",
ResponseType = "code id_token token",
Scope = "openid profile application.profile",
PostLogoutRedirectUri = "https://localhost:44302/Umbraco",
Notifications = new OpenIdConnectAuthenticationNotifications
{
SecurityTokenValidated = ClaimsTransformer.GenerateUserIdentityAsync
}
};
// Configure BackOffice Account Link button and style
identityOptions.ForUmbracoBackOffice("btn-microsoft", "fa-windows");
identityOptions.Caption = "OpenId Connect";
// Configure AutoLinking
identityOptions.SetExternalSignInAutoLinkOptions(
new ExternalSignInAutoLinkOptions(autoLinkExternalAccount: true));
app.UseOpenIdConnectAuthentication(identityOptions);
}
}
ClaimsTransformer.GenerateUserIdentityAsyn c Метод добавляет дополнительные претензии к Идентичности.
Не хватает дополнительной конфигурации или компонентов?
Заранее спасибо!