【问题标题】:Linking Zendesk to Identityserver4将 Zendesk 链接到 Identityserver4
【发布时间】:2021-09-22 07:53:52
【问题描述】:

使用 IdentityServer4 作为专用的 ASP.NET Core 服务,它托管 ASP.NET Identity MVC 脚手架页面。 我们有我们的应用程序(React 前端),如果用户未登录,它会使用 OAUTH 进程重定向到身份服务器

问题案例; 我们想将 zendesk 设置为我们的帮助中心,但我们希望它位于登录用户墙的后面。 Zendesk 允许 SAML 或 JWT 令牌(这甚至不是身份验证标准,只是令牌机制,但无论如何)。 SAML 在 IdentityServer 上不可用,除非使用相当昂贵的附加组件。

我们想做的是走使用 JWT 令牌方法的路线。据我了解,我们在 zendesk 中填写了一个登录 url,它链接到我们的身份应用程序。 登录后(或当用户已经登录时),我们需要将用户重定向到特定的 Zendesk 端点,并在 URL 上附加一个 JWT 令牌。

我知道有 TokenClient 允许调用正确的端点来生成令牌,但这不是在这里使用的错误工具,因为这意味着进程将出站,并再次在连接/令牌端点上入站? 我们可以在 IdentityServer 中使用一些类来创建这样的令牌吗?

谢谢!

【问题讨论】:

    标签: identityserver4 zendesk


    【解决方案1】:

    Zendesk 有一些用于此场景的代码示例:examples。特别是C# handler example

    在您的情况下,您可以将示例代码添加到名为 LaunchZendeskController 的 api 控制器中。

    原型示例

    [ApiController]
        [Route("[controller]")]
        public class LaunchZendeskController : ControllerBase
        {
            private const string SHARED_KEY = "{my zendesk token}";
            private const string SUBDOMAIN = "{my zendesk subdomain}";
    
            [HttpGet]
            public IActionResult Get()
            {
                TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
                int timestamp  = (int) t.TotalSeconds;
    
                var payload = new Dictionary<string, object>() {
                    { "iat", timestamp },
                    { "jti", System.Guid.NewGuid().ToString() }
                    // { "name", currentUser.name },
                    // { "email", currentUser.email }
                };
                string token = JWT.JsonWebToken.Encode(payload, SHARED_KEY, JWT.JwtHashAlgorithm.HS256);
                string redirectUrl = "https://" + SUBDOMAIN + ".zendesk.com/access/jwt?jwt=" + token;
                
                return Redirect(redirectUrl);
            }    
        }
    

    这样,当您浏览/重定向到 https://YourIdpUrl/launchzendesk 时,将使用您 generated 的共享密钥创建一个令牌,并且您将使用创建的令牌重定向到 Zendesk。

    注意:该示例相当陈旧,对于 dotnet 核心,您可能应该使用另一个令牌生成器类。最有可能使用 nuget 包:System.IdentityModel.Tokens.Jwt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多