OpenID Connect 轻量级库
OpenID Connect lightweight library
我正在寻找将实现这些例程的 OpenID Connect (OIDC) 依赖方轻量级库。
- 撰写"Authentication Request"
- 验证"id_token"签名
(包括从元数据端点下载证书)
- 解析"id_token"JWT
唯一要支持的 OIDC 流是所谓的“隐式流”,其中服务器直接从 "id_token"(和 "access_token" 如果请求)授权端点(spec link)。
搜索 NuGet 存储库似乎产生了唯一合适的选项 - OWIN 中间件,尽管我可以确认它有效,但最好有轻量级的替代方案。
只是分享对我有用的东西。
为了实现第一个目标,可以使用名为 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) Microsoft 的 NuGet 包是一种可行的方法。代码片段也在下面。
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;
这一切都是轻量级的,可以使您的应用程序免受不必要的依赖。
我正在寻找将实现这些例程的 OpenID Connect (OIDC) 依赖方轻量级库。
- 撰写"Authentication Request"
- 验证"id_token"签名 (包括从元数据端点下载证书)
- 解析"id_token"JWT
唯一要支持的 OIDC 流是所谓的“隐式流”,其中服务器直接从 "id_token"(和 "access_token" 如果请求)授权端点(spec link)。
搜索 NuGet 存储库似乎产生了唯一合适的选项 - OWIN 中间件,尽管我可以确认它有效,但最好有轻量级的替代方案。
只是分享对我有用的东西。
为了实现第一个目标,可以使用名为 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) Microsoft 的 NuGet 包是一种可行的方法。代码片段也在下面。
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;
这一切都是轻量级的,可以使您的应用程序免受不必要的依赖。