【问题标题】:OpenID Connect lightweight libraryOpenID Connect 轻量级库
【发布时间】:2016-01-20 05:15:53
【问题描述】:

我正在寻找能够实现这些例程的 OpenID Connect (OIDC) 依赖方轻量级库

  1. 编写“身份验证请求”
  2. 验证“id_token”签名 (包括从元数据端点下载证书)
  3. 解析“id_token”JWT

唯一受支持的 OIDC 流是所谓的“隐式流”,其中服务器直接从授权端点 (spec link) 以“id_token”(以及“access_token”,如果请求)回答。

搜索 NuGet 存储库似乎会产生唯一合适的选项 - OWIN 中间件,尽管我可以确认它有效,但最好有轻量级的替代方案。

【问题讨论】:

    标签: c# .net single-sign-on openid openid-connect


    【解决方案1】:

    只是分享对我有用的东西。

    为了实现第一个目标,可以使用名为 Thinktecture.IdentityModel.Client (link) 的 NuGet 包(来自 IdentityServer 创建者的包,这本身就是令人难以置信的)。下面是一个显示基本用法的示例。

    var client = new OAuth2Client(new Uri(AuthorizeEndpointUrl));
    
    string url = client.CreateAuthorizeUrl(
        clientId: ClientId,
        redirectUri: RedirectUri,
        responseType: "id_token",
        responseMode: "form_post",
        nonce: Guid.NewGuid().ToString(),
        additionalValues: additionalValues);
    

    关于解析和验证从 OIDC 身份提供者收到的 JWT,System.IdentityModel.Tokens.Jwt (link) 微软的 NuGet 包是一种可行的方法。代码 sn-p 也在下面。

    var parameters = new TokenValidationParameters()
    {
        IssuerSigningTokens = GetSigningTokens(MetadataEndpointUrl),
        ValidAudience = ValidAudience,
        ValidIssuer = ValidIssuer,
    };
    
    var tokenHandler = new JwtSecurityTokenHandler();
    
    SecurityToken validated;
    tokenHandler.ValidateToken(jwt, parameters, out validated);
    
    return validated as JwtSecurityToken;
    

    这一切都是轻量级的,可以让您的应用程序保持干净,避免不必要的依赖。

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      相关资源
      最近更新 更多