Identity as a Service

Posted on Sat 15 March 2025 in Journal

Abstract Identity as a Service
Authors Walter Fan
 Category    learning note  
Status v1.0
Updated 2025-03-15
License CC-BY-NC-ND 4.0

Identity as a Service

IDaaS(身份即服务)是什么?

IDaaS 是一种基于云的身份与访问管理(IAM)解决方案,提供用户身份管理、认证、授权等服务,无需企业自建本地基础设施。核心目标是通过云服务集中化、简化并增强数字身份的安全性。


核心功能与细节

  1. 身份管理
  2. 用户生命周期管理:自动化创建、更新、删除用户账号(如入职/离职流程)。
  3. 目录集成:与本地目录(如 Microsoft Active Directory)或云目录(Azure AD)同步。

  4. 认证与授权

  5. 单点登录(SSO):用户一次登录即可访问多个应用(如企业微信、Salesforce、钉钉)。
  6. 多因素认证(MFA):结合密码+短信/邮件/生物识别(如指纹、人脸)。
  7. 基于角色的访问控制(RBAC):按角色分配权限(如管理员、普通员工)。

  8. 安全与合规

  9. 风险自适应认证:根据登录地点、设备风险动态调整认证强度。
  10. 审计日志:记录所有访问行为,满足 GDPR、等保等合规要求。

  11. 用户自助服务

  12. 密码重置、账号恢复等操作无需 IT 部门介入。

关键技术栈与协议

IDaaS 的实现依赖以下核心技术和协议:

1. 身份协议

  • SAML 2.0(安全断言标记语言)
  • 用途:实现跨域单点登录(SSO),常用于企业级应用(如与 Salesforce 集成)。
  • 流程:用户访问应用 → 重定向到 IDaaS 认证 → 返回 SAML 断言给应用。

  • OAuth 2.0 / OpenID Connect (OIDC)

  • OAuth 2.0:授权第三方应用访问用户资源(如“用微信登录”)。
  • OIDC:在 OAuth 2.0 基础上扩展,提供身份认证(返回 JWT 令牌)。

  • SCIM(跨域身份管理系统)

  • 用途:自动化用户账号的创建、同步和删除(如从 HR 系统同步到 IDaaS)。

  • LDAP/Active Directory

  • 用途:与本地目录服务集成,实现混合云身份管理。

2. 安全技术

  • JWT(JSON Web Token)
  • 用于 OIDC 和 API 认证,包含用户信息的签名令牌。
  • 加密协议
  • HTTPS(TLS 1.3)、加密存储(如 AES-256)、密钥管理(HSM)。
  • FIDO2/WebAuthn
  • 无密码认证标准,支持硬件密钥(如 YubiKey)或生物识别。

3. 技术实现栈

  • 云原生架构:微服务、容器化(Docker/K8s)、无服务器(AWS Lambda)。
  • 数据库:分布式数据库(如 Amazon DynamoDB、MongoDB)存储用户数据。
  • 开发框架
  • 后端:Node.js(Express)、Java(Spring Security)、Python(Django)。
  • 前端:React/Angular 集成 SDK(如 Auth0 的 Lock 组件)。
  • 开源工具:Keycloak(开源 IAM)、Gluu、FreeIPA。

典型应用场景

  1. 企业混合云
  2. 本地 AD + 云 IDaaS(如 Azure AD)实现无缝 SSO。
  3. 开发者集成
  4. 通过 API/SDK 为应用快速添加认证(如使用 Auth0 的嵌入式登录页)。
  5. 物联网(IoT)安全
  6. 为设备分配唯一身份,通过 OAuth 2.0 设备流认证。
  7. 客户身份管理(CIAM)
  8. 管理千万级外部用户(如电商平台会员)。

优势与挑战

  • 优势
  • 快速部署:无需自建 IAM 系统,节省运维成本。
  • 弹性扩展:支持海量用户(如双11期间的电商平台)。
  • 标准化:兼容主流协议(SAML/OAuth),降低集成难度。

  • 挑战

  • 遗留系统兼容:老旧系统可能不支持现代协议(需定制适配)。
  • 数据主权:跨国企业需选择符合本地数据驻留要求的供应商。

主流 IDaaS 供应商技术对比

供应商 核心技术栈 特色协议支持
Okta 多租户云架构、AI 驱动风险分析 SAML、OIDC、FIDO2
Azure AD 深度集成 Microsoft 生态(如 Office 365) WS-Federation、Kerberos
Auth0 开发者友好、高度可定制化 OAuth 2.0、密码less认证
阿里云 IDaaS 符合中国等保要求 国内定制协议(如公安三要素认证)

应用实例

身份即服务(Identity as a Service,IDaaS)在实际应用中,开发者可以使用多种编程语言(如Java、Go)来集成和实现身份验证功能。以下是一些结合Java和Go的应用实例及代码示例:

1. Java应用实例:

  • OpenID Connect(OIDC)协议的单点登录(SSO):

阿里云IDaaS提供了一个基于Java Spring框架的OIDC协议SSO示例,展示了如何在应用中集成OIDC实现单点登录功能。

主要步骤:

  • 在IDaaS中注册应用,获取客户端ID和密钥。

  • 配置应用的重定向URI,以确保认证后的用户能正确返回应用。

  • 在Spring应用中,配置OAuth2客户端属性,设置客户端ID、密钥、授权服务器等信息。

  • 实现登录和登出功能,确保用户会话的管理和安全性。

代码示例:

以下是一个简单的Spring Security配置示例,展示如何设置OAuth2登录:

java @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests(authorizeRequests -> authorizeRequests.anyRequest().authenticated() ) .oauth2Login(withDefaults()); } }

完整的示例代码和详细说明可参考阿里云IDaaS的GitHub仓库: citeturn0search7

  • 设备代码授权流程:

在无浏览器的设备(如打印机、机顶盒等)上,通常采用设备代码授权流程进行身份验证。阿里云IDaaS提供了一个Java示例,演示了如何在终端显示二维码供用户扫描登录。

主要步骤:

  • 在IDaaS中创建支持设备模式的OIDC应用。

  • 应用请求设备授权码,并生成二维码供用户扫描。

  • 用户在其他设备上扫描二维码并授权。

  • 应用轮询授权服务器,获取访问令牌。

代码示例:

以下是一个获取设备授权码的示例:

```java // 请求设备授权码 HttpResponse response = Unirest.post("https:///oauth2/device_authorization") .header("Content-Type", "application/x-www-form-urlencoded") .field("client_id", "") .field("scope", "openid profile") .asJson();

JSONObject jsonResponse = response.getBody().getObject(); String deviceCode = jsonResponse.getString("device_code"); String userCode = jsonResponse.getString("user_code"); String verificationUri = jsonResponse.getString("verification_uri"); ```

完整的示例代码和详细说明可参考阿里云IDaaS的GitHub仓库: java-spring-oidc-sample

2. Go应用实例:

  • SAML协议的单点登录(SSO):

在Go语言中,可以使用开源的IDaaS/IAM平台,如TopIAM的EIAM项目,该项目支持SAML2协议的身份提供商(IdP)功能。

主要步骤:

  • 部署并配置EIAM平台,设置SAML2 IdP。

  • 在应用中集成SAML2服务提供商(SP)功能,与EIAM的IdP进行对接。

  • 实现SSO功能,确保用户在多个应用间无缝切换。

代码示例:

以下是一个使用SAML2进行SSO的Go代码示例:

```go package main

import ( "github.com/crewjam/saml/samlsp" "net/http" )

func main() { keyPair, _ := tls.LoadX509KeyPair("cert.pem", "key.pem") idpMetadataURL, _ := url.Parse("https://idp.example.com/metadata") rootURL, _ := url.Parse("https://sp.example.com/")

  samlSP, _ := samlsp.New(samlsp.Options{
      URL:            *rootURL,
      Key:            keyPair.PrivateKey.(*rsa.PrivateKey),
      Certificate:    keyPair.Leaf,
      IDPMetadataURL: idpMetadataURL,
  })

  app := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
      user := samlsp.Token(r.Context()).Attributes.Get("username")
      w.Write([]byte("Hello, " + user + "!"))
  })

  http.Handle("/saml/", samlSP)
  http.Handle("/", samlSP.RequireAccount(app))
  http.ListenAndServe(":8000", nil)

} ```

完整的项目代码和详细说明可参考TopIAM的GitHub仓库: eiam

相关的开源项目

  • Keycloak Keycloak 是由 Red Hat 开发的开源身份和访问管理解决方案,提供单点登录 (SSO)、用户联合、强身份验证和细粒度授权等功能。它支持 OpenID Connect、OAuth 2.0 和 SAML 等标准协议。

  • Apache Syncope Apache Syncope 是一个用于管理企业环境中数字身份的开源系统,提供全面的身份生命周期管理,包括配置、协调和报告。作为 Apache 软件基金会项目,它受益于强大的社区支持结构。

  • OpenIAM OpenIAM 提供融合身份治理、客户身份和访问管理 (CIAM)、多因素身份验证 (MFA) 和特权访问管理 (PAM) 的融合平台,旨在提供身份优先的安全性。它提供了一种开源解决方案,可支持零信任计划,同时提高生产力和合规性。

  • Casdoor Casdoor 是一个强大的身份验证平台,支持第三方应用程序登录,允许用户选择自己喜欢的社交网络进行身份验证。它支持使用插件扩展第三方登录,并提供用户友好的身份和访问管理界面。

  • ForgeRock ForgeRock 为其身份和访问管理项目提供开源存储库,允许用户下载、修改和贡献代码。他们的平台为身份管理提供了全面的解决方案,包括用户身份验证、授权和身份治理。


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。