Как добавить дополнительные заявки в ClaimsPrincipal после аутентификации ADFS в приложении MVC - PullRequest
1 голос
/ 29 января 2020

У нас есть MVC 5 веб-приложение, которое использует аутентификацию ADFS 4. Я пытаюсь найти лучшее место, где я могу добавить дополнительные утверждения в ClaimsPrincipal после завершения аутентификации.

Есть ли какие-либо события, к которым я могу получить доступ, например, OnAuthenticated? Как получить доступ к такого рода событиям?

Это то, что я намереваюсь использовать, как только я смогу получить доступ к событию:

IOwinContext context = Request.GetOwinContext();

if (appRoles != null)
{
    ClaimsIdentity claimsIdentity = new ClaimsIdentity(System.Web.HttpContext.Current.User.Identity);

    foreach (var role in appRoles)
    {
        claimsIdentity.AddClaim(new Claim("http://schemas.microsoft.com/ws/2008/06/identity/claims/role", role));
    }

    context.Authentication.AuthenticationResponseGrant = new AuthenticationResponseGrant
        (new ClaimsPrincipal(claimsIdentity), new AuthenticationProperties { IsPersistent = true });
}

РЕДАКТИРОВАТЬ: Это то, что мой App_Data\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(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            CookieManager = new SystemWebCookieManager()
        });

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

1 Ответ

0 голосов
/ 07 февраля 2020

Я столкнулся с подобной проблемой и смог найти способ добавить дополнительные заявки после входа в ADFS в моем приложении MVC 5. Более подробную информацию можно найти по msdn ссылке .

Вот код этой ссылки. Сначала создайте новый класс ClaimsAuthenticationManager и внутри него установите дополнительные утверждения:

class SimpleClaimsAuthenticatonManager : ClaimsAuthenticationManager
{
    public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
    {
        if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true)
        {
            ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim(ClaimTypes.Role, "User"));
        }
        return incomingPrincipal; 
    }
}

Впоследствии укажите этот класс в файле web.config в элементе identityConfiguration :

<system.identityModel>  
   <identityConfiguration>  
     <claimsAuthenticationManager type="ENTER YOUR NAMESPACE HERE.SimpleClaimsAuthenticatonManager, ENTER PROJECT NAME HERE" />  
     ...  
   </identityConfiguration>  
</system.identityModel> 
...