ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Authelia 集成 ownCloud Infinite Scale:OpenID Connect 1.0 单点登录(SSO)完整配置指南

Authelia 集成 ownCloud Infinite Scale:OpenID Connect 1.0 单点登录(SSO)完整配置指南 Authelia 集成 ownCloud Infinite ScaleOpenID Connect 1.0 单点登录SSO完整配置指南【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia导读本文是一份面向生产部署的实操指南完整讲解如何将 ownCloud Infinite ScaleoCIS作为 Relying Party依赖方接入 Authelia 的 OpenID Connect 1.0 Provider实现 Web 端、桌面客户端、Android 与 iOS 四种客户端的统一单点登录与双因素认证。读完本文你将掌握 Authelia 端identity_providers.oidc的完整注册客户端配置含自定义 Token 生命周期、CORS 与 PKCE 约束、oCIS 端全部环境变量的含义与取值依据以及从授权码流程、刷新令牌到账户自动预置Autoprovision的端到端工作原理。集成概览与测试版本本集成方案属于社区维护support level 为 community的集成示例已在以下版本组合上验证通过Autheliav4.38.0ownCloud Infinite Scalev4.0.5集成方式上ownCloud Infinite Scale 仅支持一种配置途径通过环境变量完成 OIDC 相关设置详见下文 Application 端配置。背景知识Authelia 以 OpenID Connect 1.0 Provider 身份对外提供服务OpenID Certified™其端点可通过 Discovery 元数据发现例如https://auth.example.com/.well-known/openid-configuration。关于 Provider 与注册客户端Registered Client的通用配置方法可先阅读 OpenID Connect 1.0 集成介绍、OpenID Connect 1.0 Provider 配置 与 OpenID Connect 1.0 Clients 配置。假设前提Assumptions本示例基于以下部署假设实际使用时请替换为你的真实域名项目取值Application Root URLoCIShttps://owncloud.example.comAuthelia Root URL同时是 OIDC Issuerhttps://auth.example.comClient IDWeb 应用ocisClient SecretWeb 应用insecure_secret仅演示用其余客户端的 Client ID / Secret固定值为了与 oCIS 原生 App 保持兼容不得随意更改安全提示ocis、insecure_secret以及下方配置中出现的其他固定字符串仅用于演示。client_id必须全局唯一、不超过 100 字符、且只能包含 RFC 3986 定义的 Unreserved Charactersclient_secret在生产环境应使用 Authelia 提供的方式生成强随机值并强烈建议以哈希形式而非明文存储在配置中。参见 OpenID Connect 1.0 常见问题FAQ。Authelia 端配置以下 YAML 是适用于 oCIS 场景的Authelia client configuration注册客户端配置示例完整覆盖 Web、桌面、Android、iOS 四类客户端。identity_providers: oidc: # 将访问令牌与刷新令牌的生命周期从默认 30 分钟延长规避 ownCloud 客户端每隔几小时就要求重新认证的问题。 # 一旦 Authelia 支持动态客户端注册DCR此配置即可移除。 # 注意ownCloud 内置 IdP 使用的是 30 天。 lifespans: custom: ocis: access_token: 2 days refresh_token: 3 days cors: endpoints: - authorization - token - revocation - introspection - userinfo clients: - client_id: ocis client_name: ownCloud Infinite Scale lifespan: ocis public: true authorization_policy: two_factor require_pkce: true pkce_challenge_method: S256 scopes: - openid - offline_access - groups - profile - email redirect_uris: - https://owncloud.example.com/ - https://owncloud.example.com/oidc-callback.html - https://owncloud.example.com/oidc-silent-redirect.html - https://owncloud.example.com/apps/openidconnect/redirect response_types: - code grant_types: - authorization_code - refresh_token access_token_signed_response_alg: none userinfo_signed_response_alg: none token_endpoint_auth_method: none - client_id: xdXOt13JKxym1B1QcEncf2XDkLAexMBFwiT9j6EfhhHFJhs2KM9jbjTmf8JBXE69 client_name: ownCloud Infinite Scale (Desktop Client) client_secret: UBntmLjC2yYCeHwsyj73Uwo9TAaecAetRwMw0xYcvNL9yRdLSUi0hUAHfvCHFeFh public: false authorization_policy: two_factor require_pkce: true pkce_challenge_method: S256 scopes: - openid - offline_access - groups - profile - email redirect_uris: - http://127.0.0.1 - http://localhost response_types: - code grant_types: - authorization_code - refresh_token access_token_signed_response_alg: none userinfo_signed_response_alg: none token_endpoint_auth_method: client_secret_basic - client_id: e4rAsNUSIUs0lF4nbv9FmCeUkTlV9GdgTLDH1b5uie7syb90SzEVrbN7HIpmWJeD client_name: ownCloud Infinite Scale (Android) client_secret: dInFYGV33xKzhbRmpqQltYNdfLdJIfJ9L5ISoKhNoT9qZftpdWSP71VrpGR9pmoD public: false authorization_policy: two_factor require_pkce: true pkce_challenge_method: S256 redirect_uris: - oc://android.owncloud.com scopes: - openid - offline_access - groups - profile - email response_types: - code grant_types: - authorization_code - refresh_token access_token_signed_response_alg: none userinfo_signed_response_alg: none token_endpoint_auth_method: client_secret_basic - client_id: mxd5OQDk6es5LzOzRvidJNfXLUZS2oN3oUFeXPP8LpPrhx3UroJFduGEYIBOxkY1 client_name: ownCloud Infinite Scale (iOS) client_secret: KFeFWWEZO9TkisIQzR3fo7hfiMXlOpaqP8CFuTbSHzV1TUuGECglPxpiVKJfOXIx public: false authorization_policy: two_factor require_pkce: true pkce_challenge_method: S256 redirect_uris: - oc://ios.owncloud.com - oc.ios://ios.owncloud.com scopes: - openid - offline_access - groups - profile - email grant_types: - authorization_code - refresh_token access_token_signed_response_alg: none userinfo_signed_response_alg: none token_endpoint_auth_method: client_secret_basic关键配置项逐项解读以下结合 OpenID Connect 1.0 Clients 配置文档 与 Provider 配置文档 对上述配置做原理级拆解。lifespans.custom.ocis自定义 Token 生命周期这是整个集成中最关键的调优项Authelia 默认的 access token 生命周期为 1 小时、refresh token 为 1 小时 30 分钟见 Provider 配置中lifespans的默认值access_token: 1 hour、refresh_token: 1 hour 30 minutes、id_token: 1 hour、authorize_code: 1 minute、device_code: 10 minutes。而 ownCloud 客户端会定期静默刷新会话默认时长会导致用户每隔几小时就被要求重新登录。通过lifespans.custom定义名为ocis的自定义生命周期再将客户端上的lifespan: ocis指向它即可做到仅对本客户端生效的精细化覆盖。自定义生命周期的取值优先级为按令牌类型且按授权类型定制 按令牌类型定制 全局默认值。ownCloud 内置 IdP 使用的时长是 30 天此处示例采用 2 天访问令牌 3 天刷新令牌是一个与刷新令牌轮换机制配合更安全的折中值你可以按实际安全策略调整。cors.endpoints跨域资源共享oCIS 的前端浏览器会向 Authelia 的多个端点发起跨域请求因此必须显式放行这些端点。本示例启用了authorization、token、revocation、introspection、userinfo五个端点。根据 Provider 配置可选端点还包括pushed-authorization-request官方建议userinfo至少应被启用。注意只要请求携带Origin头Authelia 即会返回 CORS 响应头。clients四类注册客户端客户端client_id类型认证方式说明Web 应用ocispublicpublic: truetoken_endpoint_auth_method: none浏览器端 SPA无法保密凭据依赖 PKCE桌面客户端xdXOt13JKxym1B1QcEncf2XDkLAexMBFwiT9j6EfhhHFJhs2KM9jbjTmf8JBXE69confidentialclient_secret_basic回环地址127.0.0.1/localhostAndroide4rAsNUSIUs0lF4nbv9FmCeUkTlV9GdgTLDH1b5uie7syb90SzEVrbN7HIpmWJeDconfidentialclient_secret_basic自定义协议oc://android.owncloud.comiOSmxd5OQDk6es5LzOzRvidJNfXLUZS2oN3oUFeXPP8LpPrhx3UroJFduGEYIBOxkY1confidentialclient_secret_basic自定义协议oc://ios.owncloud.com、oc.ios://ios.owncloud.com要点固定凭据除 Web 客户端外其余三个客户端的 ID 与 Secret 是 oCIS 原生 App 内置的固定值配置时必须原样使用以保证兼容Web 客户端的ocis/insecure_secret也须与 oCIS 端WEB_OIDC_CLIENT_ID保持一致。PKCE 强制Web 客户端使用公开类型public无法在 Token 端点进行客户端认证因此必须配合require_pkce: true与pkce_challenge_method: S256防授权码拦截RFC 7636。S256 是推荐的挑战方法依赖方生成随机code_verifier经 SHA-256 摘要后 Base64URL 编码为code_challenge随授权请求发送换取令牌时再原样提交code_verifier证明代码占有。响应类型与授权类型统一使用code授权码流程与authorization_coderefresh_token。offline_accessscope 是换取刷新令牌的前提Authelia 将刷新令牌视为单次使用刷新流程会签发新的刷新令牌Refresh Token Rotation符合 RFC 9700 建议。签名算法access_token_signed_response_alg: none与userinfo_signed_response_alg: none表示访问令牌与 UserInfo 响应不签名Authelia 的访问令牌默认即为不透明令牌而非 JWT同时PROXY_OIDC_ACCESS_TOKEN_VERIFY_METHODnone与之对应。客户端仍会通过client_secret_basic或 PKCE 完成认证。授权策略authorization_policy: two_factor表示该客户端的授权请求一律要求双因素认证该策略仅作用于 OIDC 授权请求与访问控制规则Access Control Rules是两个不同的机制。redirect_uris 限制重定向 URI 区分大小写必须包含http或https方案原生 App 的自定义协议oc://属特例。不在列表中的回调会被拒绝。关于 scope 与 claims 的补充说明五个 scopeopenid、offline_access、groups、profile、email的语义可参见 OpenID Connect 1.0 Claims 文档openid启用 OpenID Connect 1.0 语义签发 ID TokensubUUID v4 不透明标识与iss的组合是唯一可靠、稳定的用户身份标识应作为账户关联的依据。offline_access允许应用获得刷新令牌从而代表用户持续访问。profile携带name、preferred_username、family_name、given_name等用户档案 claims。email携带email、email_verified、alt_emails等 claims。groups将认证后端报告的用户组列表放入 claims默认位置为 UserInfo。Application 端配置oCISownCloud Infinite Scale 只有一种配置方法环境变量。配置的目标是让它把 Authelia 当作 OpenID Connect 1.0 Provider 使用。标准环境变量.envWEB_OIDC_CLIENT_IDocis PROXY_OIDC_ISSUERhttps://auth.example.com PROXY_OIDC_REWRITE_WELLKNOWNtrue PROXY_OIDC_ACCESS_TOKEN_VERIFY_METHODnone PROXY_OIDC_SKIP_USER_INFOfalse PROXY_AUTOPROVISION_ACCOUNTSfalse PROXY_AUTOPROVISION_CLAIM_USERNAMEpreferred_username PROXY_AUTOPROVISION_CLAIM_EMAILemail PROXY_AUTOPROVISION_CLAIM_DISPLAYNAMEname PROXY_AUTOPROVISION_CLAIM_GROUPSgroupsDocker Compose 形式services: oics: environment: WEB_OIDC_CLIENT_ID: ocis PROXY_OIDC_ISSUER: https://auth.example.com PROXY_OIDC_REWRITE_WELLKNOWN: true PROXY_OIDC_ACCESS_TOKEN_VERIFY_METHOD: none PROXY_OIDC_SKIP_USER_INFO: false PROXY_AUTOPROVISION_ACCOUNTS: false PROXY_AUTOPROVISION_CLAIM_USERNAME: preferred_username PROXY_AUTOPROVISION_CLAIM_EMAIL: email PROXY_AUTOPROVISION_CLAIM_DISPLAYNAME: name PROXY_AUTOPROVISION_CLAIM_GROUPS: groups环境变量含义与取值依据环境变量取值含义WEB_OIDC_CLIENT_IDocis必须与 Authelia 端 Web 客户端的client_id完全一致PROXY_OIDC_ISSUERhttps://auth.example.comAuthelia 的根 URL即 OpenID Connect 1.0 IssuerPROXY_OIDC_REWRITE_WELLKNOWNtrue重写 Discovery 文档.well-known/openid-configuration中的端点地址使其指向实际可访问的 Issuer 主机PROXY_OIDC_ACCESS_TOKEN_VERIFY_METHODnone与 Authelia 端access_token_signed_response_alg: none对应访问令牌不签名oCIS 不做 JWT 签名校验PROXY_OIDC_SKIP_USER_INFOfalse不跳过 UserInfo 端点调用oCIS 会通过userinfo端点获取用户 claims与 Authelia 端 CORS 放行userinfo对应PROXY_AUTOPROVISION_ACCOUNTSfalse关闭账户自动预置若开启true首次登录时 oCIS 会根据下方 claims 自动创建本地账户PROXY_AUTOPROVISION_CLAIM_USERNAMEpreferred_username自动预置时用于用户名的 claim 来源来自profilescopePROXY_AUTOPROVISION_CLAIM_EMAILemail自动预置时用于邮箱的 claim 来源来自emailscopePROXY_AUTOPROVISION_CLAIM_DISPLAYNAMEname自动预置时用于显示名的 claim 来源来自profilescopePROXY_AUTOPROVISION_CLAIM_GROUPSgroups自动预置时用于用户组的 claim 来源来自groupsscope几点重要提醒账户关联依据即使启用了自动预置preferred_username、email等 claims 也只应用于首次预置账户不应作为后续登录的账户绑定依据。稳定的绑定应使用subiss组合Authelia 的sub是 UUID v4 不透明标识。保持两端一致性Issuer、客户端 ID、令牌签名方式必须与 Authelia 端注册客户端逐项对应否则授权请求或令牌校验会失败。CORS 依赖浏览器端流程依赖 Authelia 已按上文放行authorization、token等跨域端点缺少任何一项都可能表现为登录流程中断。安全与生产化建议替换演示凭据生产环境不要使用文档中的固定 Client ID / Secret原生 App 客户端除外。Web 客户端可改用随机长字符串并使用 Authelia 的客户端标识/密钥生成方法见 FAQ。Secret 哈希存储client_secret明文存储在配置中属于已弃用行为建议以哈希形式存储注意过高的哈希工作因子可能导致客户端超时需要按 FAQ 中的 Tuning the work factors 调节。刷新令牌生命周期刷新令牌的生命周期应显著长于访问令牌官方建议约为最高令牌生命周期的 50% 或 30 分钟中的较小者本示例的 2 天 / 3 天组合兼顾了 oCIS 客户端的静默续期需求与安全余量。限制跨域来源Authelia 默认允许任意 https Origin 的跨域请求如需收紧可在cors.allowed_origins中显式声明允许的 Origin或启用allowed_origins_from_client_redirect_uris自动从重定向 URI 提取。参见ownCloud Infinite Scale 集成文档OpenID Connect 1.0 集成介绍OpenID Connect 1.0 Clients 配置OpenID Connect 1.0 Provider 配置OpenID Connect 1.0 Claims 与 Scope 定义【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表