2016-08-08 8 views
0

Я пытаюсь получить доступ к заявлениям пользователей, которые возвращаются из входа в ADFS. ADFS возвращает имя пользователя и с этим именем пользователя я должен запустить запрос в другой БД, чтобы получить информацию о пользователе и сохранить его. Я не знаю, где это сделать и что такое лучшая практика. Я могу получить доступ к претензии пользователя в контроллере представления, как:Получите претензии пользователей до того, как любая страница загрузится на внешний вход в ADFS

public ActionResult Index() 
{ 
    var ctx = Request.GetOwinContext(); 
    ClaimsPrincipal user = ctx.Authentication.User; 
    IEnumerable<Claim> claims = user.Claims; 
    return View(); 
} 

Но что мне нужно сделать, это, как я сказал, претензия доступа, как в Global.asax.cs или startup.cs для хранения пользовательской информации до запуска приложения.

Это мой Startup.Auth.cs файл:

public partial class Startup 
{ 
    private static string realm = ConfigurationManager.AppSettings["ida:Wtrealm"]; 
    private static string adfsMetadata = ConfigurationManager.AppSettings["ida:ADFSMetadata"]; 

    public void ConfigureAuth(IAppBuilder app) 
    { 
     app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType); 

     app.UseCookieAuthentication(
      new CookieAuthenticationOptions 
      { 
       AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType 
      }); 

     app.UseWsFederationAuthentication(
      new WsFederationAuthenticationOptions 
      { 
       Wtrealm = realm, 
       MetadataAddress = adfsMetadata 
      }); 
    } 
} 

ответ

1

Добавим обработчик событий к значению WsFederationAuthenticationOptions в нашем загрузочном файле.

Это происходит сразу же после проверки маркера безопасности.

app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions() 
{ 
    MetadataAddress = MetadataAddress, 

    Wtrealm = Wtrealm, 
    Wreply = CallbackPath, 
    Notifications = new WsFederationAuthenticationNotifications() 
    { 
     SecurityTokenValidated = (ctx) => 
     { 
      ClaimsIdentity identity = ctx.AuthenticationTicket.Identity; 
      DoSomethingWithLoggedInUser(identity); 
     } 
    } 
}; 
+0

Это работает, чтобы получить информацию о пользователе, но теперь у меня есть еще одна проблема. Аутентификация кажется пожизненной, и когда я пытаюсь подключиться к серверу, он думает, что я вошел в систему в любом случае, а не перенаправляюсь на авторизацию ADFS. Интересно, если я должен изменить CookieAuthenticationDefaults на WsFederationAuthenticationDefaults, чтобы решить эту проблему или любую идею, что может быть неправильным в моем коде? – elly

+0

Извините, мое плохое, что-то не так со сборкой. В любом случае это решило это! Спасибо. – elly