IdentityServer4 学习笔记-交互服务

259 阅读7分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

一、IdentityServer交互服务

IIdentityServerInteractionService接口主要提供用户界面用于与IdentityServer通信的服务,主要与用户交互有关,可以通过依赖注入来获取实例,通常作为构造函数参数注入到IdentityServer的用户界面的MVC控制器中

1 IdentityServer API
  • GetAuthorizationContextAsync 基于传递给登录或同意页面的returnUrl返回AuthorizationRequest
  • IsValidReturnUrl 指示在登录或同意后returnUrl是否为重定向的有效URL。
  • GetErrorContextAsync 根据传递给错误页面的errorId返回ErrorMessage
  • GetLogoutContextAsync 根据传递给注销页面的logoutId返回LogoutRequest
  • CreateLogoutContextAsync 如果当前没有logoutId,则用于创建logoutId。这将创建一个cookie,捕获注销所需的所有当前状态,logoutId标识该cookie。在没有当前logoutId时使用,并且注销页面必须捕获当前用户在重定向到外部身份提供程序以进行注销之前注销所需的状态。新创建的logoutId需要在注销时往返外部身份提供商,然后在注销回调页面上使用,就像在普通注销页面上一样。
  • GrantConsentAsync 接受ConsentResponse以通知IdentityServer用户同意特定的AuthorizationRequest
  • GetAllUserConsentsAsync 返回用户的Consent集合。
  • RevokeUserConsentAsync 撤消用户对客户端的所有同意和授权。
  • RevokeTokensForCurrentSessionAsync 撤消用户在当前会话期间签署的客户的所有同意和授权。
2 .AuthorizationRequest
  • ClientId 发起请求的客户端标识符。
  • RedirectUri 成功授权后将用户重定向到的URI。
  • DisplayMode 显示模式从授权请求传递。
  • UiLocales 从授权请求传递的UI语言环境。
  • IdP 外部身份提供者请求。这用于绕过家庭领域发现(HRD)。这是通过“idp:”前缀提供给授权请求的acr_values参数。
  • Tenant 租户请求。这是通过“tenant:”前缀提供给授权请求上的acr_values参数。
  • LoginHint 用户将用于登录的预期用户名。这是通过授权请求上的login_hint参数从客户端请求的。
  • PromptMode 授权请求中请求的提示模式。
  • AcrValues 从授权请求传递的acr值。
  • ScopesRequested 授权请求中请求的范围。
  • Parameters 整个参数集合传递给授权请求。
3. ErrorMessage
  • DisplayMode 显示模式从授权请求传递。
  • UiLocales 从授权请求传递的UI语言环境。
  • Error 错误代码。
  • RequestId 每请求标识符。这可用于向最终用户显示,并可用于诊断。
4 LogoutRequest
  • ClientId 发起请求的客户端标识符。
  • PostLogoutRedirectUri 用户在注销后将其重定向到的URL。
  • SessionId 用户当前的会话ID。
  • SignOutIFrameUrl 要在注销页面上的<iframe>中呈现以启用单点注销的URL。
  • Parameters 整个参数集合传递给结束会话端点。
  • ShowSignoutPrompt 指示是否应根据传递到结束会话端点的参数提示用户注销。
5 ConsentResponse
  • ScopesConsented 用户同意的范围集合。
  • RememberConsent 指示是否持久保留用户同意的标志。
6 Consent
  • SubjectId 授予同意的主题ID。
  • ClientId 同意的客户端标识符。
  • Scopes 范围的集合同意。
  • CreationTime 获得同意的日期和时间。
  • Expiration 同意过期的日期和时间。

二、设备交互服务

IDeviceFlowInteractionService接口提供用户界面用于在设备流授权期间与IdentityServer通信的服务,可以使用依赖注入,通常作为构造函数参数注入到IdentityServer的用户界面的MVC控制器中。

1 IDeviceFlowInteractionService的APIs
  • GetAuthorizationContextAsync 基于userCode返回DeviceFlowAuthorizationRequest传递给登录或同意页面。
  • DeviceFlowInteractionResult 完成给定的设备授权userCode
2 DeviceFlowAuthorizationRequest
  • ClientId 发起请求的客户端标识符。
  • ScopesRequested 授权请求中请求的范围。
3 DeviceFlowInteractionResult
  • IsError 指定授权请求是否出错。
  • ErrorDescription 失败时的错误描述。

三、 IdentityServer Options

  • IssuerUri 设置将在发现文档和已颁发的JWT令牌中显示的颁发者名称。建议不要设置此属性,该属性从客户端使用的主机名中推断颁发者名称。
  • PublicOrigin 此服务器实例的来源如果未设置,则从请求推断出原始名称。
1 端点(Endpoints)

允许启用/禁用各个端点,例如令牌,授权,用户信息等。

默认情况下,所有端点都已启用,但您可以通过禁用不需要的端点来锁定服务器。

2 发现

允许启用/禁用发现文档的各个部分,例如端点,范围,声明,授权类型等。

CustomEntries字典允许将自定义元素添加到发现文档中。

3 认证
  • CookieLifetime 身份验证cookie生存期(仅在使用IdentityServer提供的cookie处理程序时有效)。
  • CookieSlidingExpiration 指定cookie是否应该滑动(仅在使用IdentityServer提供的cookie处理程序时有效)。
  • RequireAuthenticatedUserForSignOutMessage 指示是否必须对用户进行身份验证以接受参数以结束会话端点。默认为false。
  • CheckSessionCookieName 用于检查会话端点的cookie的名称。
  • RequireCspFrameSrcForSignout 如果设置,将要求frame-src CSP标头在结束会话回调端点上发出,该端点向客户端呈现iframe以进行前端通道注销通知。默认为true。
4 事件

允许配置是否应将哪些事件提交到已注册的事件接收器,允许设置各种协议参数的长度限制,如客户端ID,范围,重定向URI等。

  • LoginUrlLogoutUrlConsentUrlErrorUrlDeviceVerificationUrl 设置登录,注销,同意,错误和设备验证页面的URL。
  • LoginReturnUrlParameter 设置传递给登录页面的返回URL参数的名称。默认为returnUrl。
  • LogoutIdParameter 设置传递给注销页面的注销消息id参数的名称。默认为logoutId。
  • ConsentReturnUrlParameter 设置传递给同意页面的返回URL参数的名称。默认为returnUrl。
  • ErrorIdParameter 设置传递给错误页面的错误消息id参数的名称。默认为errorId。
  • CustomRedirectReturnUrlParameter 设置从授权端点传递给自定义重定向的返回URL参数的名称。默认为returnUrl。
  • DeviceVerificationUserCodeParameter 设置传递给设备验证页面的用户代码参数的名称。默认为userCode。
  • CookieMessageThreshold IdentityServer和某些UI页面之间的某些交互需要cookie来传递状态和上下文(上面具有可配置“message id”参数的任何页面)。由于浏览器对cookie的数量及其大小有限制,因此该设置用于防止创建过多的cookie。该值设置将创建的任何类型的消息cookie的最大数量。一旦达到限制,将清除最早的消息cookie。这有效地表示用户在使用IdentityServer时可以打开多少个选项卡。
5 缓存(Caching)

设置仅在启动时在服务配置中启用了相应的缓存时才适用。

  • ClientStoreExpiration 从客户端存储加载的客户端配置的缓存持续时间。
  • ResourceStoreExpiration 缓存从资源存储加载的标识和API资源配置的持续时间。
6 CORS

IdentityServer支持某些端点的CORS。底层CORS实现由ASP.NET Core提供,因此它在依赖注入系统中自动注册。

  • CorsPolicyName 将为IdentityServer中的CORS请求评估的CORS策略的名称(默认为"IdentityServer4")。处理此问题的策略提供程序是根据ICorsPolicyService依赖注入系统中注册的方式实现的。如果您希望自定义允许连接的CORS源集,那么建议您提供自定义实现ICorsPolicyService
  • CorsPaths IdentityServer中支持CORS的端点。默认为发现,用户信息,令牌和吊销端点。
  • PreflightCacheDuration Nullable 指示在预检Access-Control-Max-Age响应头中使用的值。默认为null,表示未在响应上设置缓存标头。

适当的情况下,IdentityServer会为某些响应发出CSP标头。

  • Level 要使用的CSP级别。默认情况下使用CSP级别2,但如果必须支持旧浏览器,则将其更改CspLevel.One为兼容它们。

  • AddDeprecatedHeader 指示是否X-Content-Security-Policy还应发出较旧的CSP标头(除了基于标准的标头值)。默认为true。

  • DefaultUserCodeType 要使用的用户代码类型,除非在客户端级别设置。默认为数字,9位数代码。

  • Interval 定义令牌端点上允许的最小轮询间隔。默认为5。