导航到网站并设置声明

时间:2016-03-22 02:48:58

标签: asp.net asp.net-mvc azure azure-active-directory claims-based-identity

我需要导航到一个网站并为该网站设置一些声明,但我找不到任何有关如何操作的说明。我一定是在搜索错误的单词。

我正在使用c#和.Net framework 4.6.1

编辑1

我被要求更好地解释我的挑战。我正在开发2个独立的网站。用户将始终访问网站A,他们将使用Azure B2C进行身份验证。一旦通过身份验证,他们将执行一些操作,之后他们将导航到网站B. Azure B2C使用声明将用户数据传递到网站A,我想将其转发到网站B

2 个答案:

答案 0 :(得分:0)

网站A的声明不会发送到网站B.

这可以这样工作:

  1. 用户登录到站点A(使用来自B2C的凭据)
  2. 用户将信息保存到B2C(使用图谱API)
  3. 重定向到网站B
  4. 用户登录到站点B(这可以在不提示用户的情况下发生,同样的B2C)
  5. 声明是为站点B创建的,但它们可以包含在步骤2中设置的值
  6. 图API: https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/

    <小时/> 如果信息已经在B2C目录中,则示例更简单,创建2个站点: https://azure.microsoft.com/nl-nl/documentation/articles/active-directory-b2c-devquickstarts-web-dotnet/

    创建自定义属性以存储信息: https://azure.microsoft.com/nl-nl/documentation/articles/active-directory-b2c-reference-custom-attr/

    • 创建B2C自定义属性:
    • 创建2个(两个)B2C应用程序
    • 使用自定义属性创建单个B2C登录策略,并将其添加到声明
    • 在两个应用程序中使用相同的策略,两者都应该看到相同的声明

答案 1 :(得分:0)

您需要做的是在您的网站B中公开新的登录操作。此登录操作可以接收加密的令牌,其中包含您有兴趣转发到站点B的声明。一旦收到加密的令牌,网站B可以解密它并重新创建您感兴趣的声明。您可以使用内置的JwtSecurityToken处理程序:

https://msdn.microsoft.com/en-us/library/system.identitymodel.tokens.jwtsecuritytokenhandler(v=vs.114).aspx

例如:

public string CreateSecurityToken(string audience, IEnumerable<Claim> claims)
    {
        if (claims == null) return null;
        var credentials = new SigningCredentials(
                new InMemorySymmetricSecurityKey(Encoding.UTF8.GetBytes("SOMEKEY")),
                "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256",
                "http://www.w3.org/2001/04/xmlenc#sha256");

        var claimsIdentity = new ClaimsIdentity(claims, "Custom Authentication", System.Security.Claims.ClaimTypes.Name, System.Security.Claims.ClaimTypes.Role);
        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = claimsIdentity,
            TokenIssuerName = TokenIssuer,
            AppliesToAddress = "http://" + audience,
            Lifetime = new Lifetime(DateTime.UtcNow, DateTime.UtcNow.AddMinutes(GetTokenExpirationMinutes(audience))),
            SigningCredentials = credentials
        };
        var jwtHandler = new JwtSecurityTokenHandler();
        var token = jwtHandler.CreateToken(tokenDescriptor);
        return jwtHandler.WriteToken(token);
    }

这将创建一个令牌,您可以将其发送到网站B上的登录方法

相关问题