У меня есть проект Web Forms (.net 4.5), и я пытаюсь включить аутентификацию на внешних серверах с помощью Owin.Security.Keycloak-3.
1: Скачал и установил пакеты слепков.2: Создан класс startup.cs 3: Я добавил ключи в Web.Config 4: Я добавил функцию входа в систему
У меня есть одна проблема, когда вы пытаетесь войти, Owin не перенаправляет вас на внешний входpage.
Я могу принудительно выполнить это с помощью простого перенаправления, но класс Entity все время пуст, я хочу войти в систему, перенаправить в свой проект и получить User.Identity.Name.
Запуск.cs:
public class Startup
{
const string persistentAuthType = CookieAuthenticationDefaults.AuthenticationType;
public void Configuration(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = persistentAuthType
});
app.SetDefaultSignInAsAuthenticationType(persistentAuthType);
app.UseKeycloakAuthentication(new KeycloakAuthenticationOptions
{
Realm = WebConfigurationManager.AppSettings["RealmId"],
ClientId = WebConfigurationManager.AppSettings["ClientId"],
ClientSecret = WebConfigurationManager.AppSettings["ClientSecret"],
KeycloakUrl = WebConfigurationManager.AppSettings["Authority"],
AuthenticationType = persistentAuthType,
SignInAsAuthenticationType = persistentAuthType,
AllowUnsignedTokens = false,
DisableIssuerSigningKeyValidation = false,
DisableIssuerValidation = false,
DisableAudienceValidation = false,
TokenClockSkew = TimeSpan.FromSeconds(2)
});
Web.Config:
С ключами все в порядке, у меня один и тот же проект в MVC, и он работает.
Моя функция входа в систему:
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, ""));
claims.Add(new Claim(ClaimTypes.Email, ""));
var claimsIdentity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, claimsIdentity);
HttpContext.Current.GetOwinContext().Authentication.User = new ClaimsPrincipal(AuthenticationManager.AuthenticationResponseGrant.Principal);
HttpContext.Current.User = new ClaimsPrincipal(AuthenticationManager.AuthenticationResponseGrant.Principal);
HttpContext.Current.GetOwinContext().Authentication.SignIn(claimsIdentity);