2016-11-02 71 views

回答

0

最简单的方法是设置一个SQL属性store,然后将自定义规则写入query商店。

按照文章,是这样的:

c:[type == "http://contoso.com/emailaddress"] 
=> issue (store = "Custom SQL Store", types = ("http://contoso.com/age", "http://contoso.com/purchasinglimit"), query = "SELECT age,purchasinglimit FROM users WHERE email={0}",param = c.value); 
0

This博客条目让我们在正确的方向。索赔需要在用户验证后的最后一分钟注入。

Startup.Auth.cs应该是这个样子:

app.UseActiveDirectoryFederationServicesBearerAuthentication(
       new ActiveDirectoryFederationServicesBearerAuthenticationOptions 
       { 
        MetadataEndpoint = ConfigurationManager.AppSettings["ida:AdfsMetadataEndpoint"], 
        TokenValidationParameters = new TokenValidationParameters() 
        { 
         ValidAudience = ConfigurationManager.AppSettings["ida:Audience"], 
         //NameClaimType = "User-Principal-Name", 
         //SaveSigninToken = true 

        }, 
        //Inject custom claims from Database 
        Provider = new OAuthBearerAuthenticationProvider() 
         { 
          OnValidateIdentity = async context => 
          { 
           string UPN = context.Ticket.Identity.FindFirst(ClaimTypes.Upn).Value; 
           UPN = UPN.Remove(UPN.Length - 12); 

           User user = new User(); 

           //user = GetUserData("[email protected]"); 
           user = GetUserData(UPN); //Get user data from your DB 
           context.Ticket.Identity.AddClaim(
            new Claim("UserName", user.UserName.ToString(), ClaimValueTypes.String, "LOCAL AUTHORITY")); 

          } 
         } 
       }); 
相关问题