OAuth2授权码PKCE,不含客户端密码(wso2 5.3.0 IAM)

OAuth2授权码PKCE,不含客户端密码(wso2 5.3.0 IAM),oauth,oauth-2.0,wso2,wso2is,wso2carbon,Oauth,Oauth 2.0,Wso2,Wso2is,Wso2carbon,我目前正在尝试在公共客户机/本机客户机(Android应用程序)上实现OAuth 2.0授权代码授权 因为不可能在设备上存储客户机\u机密,所以我想使用这种授权类型 我在后端使用wso2 5.3.0 IAM 授权步骤工作得很好,但是如果没有客户机密钥:无效的请求,缺少参数:客户机密钥 我是否误解了PKCE授予的授权码是错误的,或者我是否错过了IAM中的某些配置 相比之下,这是可能的 致以最良好的祝愿, Robert即使您使用授权代码流,如果您的应用程序的客户端类型为机密,则令牌端点也需要客户端机

我目前正在尝试在公共客户机/本机客户机(Android应用程序)上实现OAuth 2.0授权代码授权

因为不可能在设备上存储
客户机\u机密
,所以我想使用这种授权类型

我在后端使用wso2 5.3.0 IAM

授权步骤工作得很好,但是如果没有
客户机密钥
无效的请求,缺少参数:客户机密钥

我是否误解了PKCE授予的授权码是错误的,或者我是否错过了IAM中的某些配置

相比之下,这是可能的

致以最良好的祝愿,
Robert

即使您使用授权代码流,如果您的应用程序的客户端类型为机密,则令牌端点也需要
客户端机密
。“在RFC 6749中,说明如下:

如果客户机类型是机密的或客户机被颁发了客户凭证(或分配了其他身份验证要求),则客户机必须按照第3.2.1节所述向授权服务器进行身份验证

因此,将应用程序的客户端类型更改为public。我不知道WSO2,但我想它提供了设置菜单来切换客户端类型,如下所示


(网站控制台的屏幕截图)


机密客户端和公共客户端的定义在RFC 6749中的“”中进行了描述。

即使您使用授权代码流,如果您的应用程序的客户端类型为机密,则令牌端点也需要
客户端机密
。“在RFC 6749中,说明如下:

如果客户机类型是机密的或客户机被颁发了客户凭证(或分配了其他身份验证要求),则客户机必须按照第3.2.1节所述向授权服务器进行身份验证

因此,将应用程序的客户端类型更改为public。我不知道WSO2,但我想它提供了设置菜单来切换客户端类型,如下所示


(网站控制台的屏幕截图)


机密客户机和公共客户机的定义在RFC 6749中的“”中进行了描述。

是的,由于内部使用了Apache OLTU库来实现OAuth2功能,因此在WSO2 is实现中必须使用客户机机密

如前所述,目前无法将应用程序注册为公共客户端

然而,这并不意味着一定存在任何安全隐患。基本上,建议说的是,不要在移动应用程序中嵌入客户端的秘密,因为这会使它容易受到攻击。它不会为受保护的后端资源提供任何额外的安全性,因为客户端请求无论如何都不会使用client\u secret进行身份验证。如果只将“Base64(client\u id:client\u secret)”视为一个字符串,则不会对协议或协议的安全性产生任何影响

因此,在移动应用程序中使用WSO2时,需要遵循以下建议

  • 使用授权码授权类型,该类型需要客户端密码
  • 使用PKCE(WSO2为5.2.0后)
  • 如果您有用于相同应用程序的其他类型的客户端或通道,例如web,则在IS中将其注册为单独的服务提供商,并为其生成一对单独的客户端id,即客户端机密
  • 为您在WSO2中注册的特定OAuth2移动客户端禁用“client_credentials”授权类型,以便这些应用程序在没有用户身份验证的情况下无法获取访问令牌
  • 更进一步,如果您需要为移动应用程序的每个实例拥有唯一的客户端凭据,那么使用OAuth2动态客户端注册(DCR)动态生成客户端凭据

  • 通过遵循上述5条建议,它为您提供了与规范中建议的相同级别的安全性。

    是的,由于内部使用了Apache OLTU库来实现OAuth2功能,因此在WSO2 is实现中客户机机密是必需的

    如前所述,目前无法将应用程序注册为公共客户端

    然而,这并不意味着一定存在任何安全隐患。基本上,建议说的是,不要在移动应用程序中嵌入客户端的秘密,因为这会使它容易受到攻击。它不会为受保护的后端资源提供任何额外的安全性,因为客户端请求无论如何都不会使用client\u secret进行身份验证。如果只将“Base64(client\u id:client\u secret)”视为一个字符串,则不会对协议或协议的安全性产生任何影响

    因此,在移动应用程序中使用WSO2时,需要遵循以下建议

  • 使用授权码授权类型,该类型需要客户端密码
  • 使用PKCE(WSO2为5.2.0后)
  • 如果您有用于相同应用程序的其他类型的客户端或通道,例如web,则在IS中将其注册为单独的服务提供商,并为其生成一对单独的客户端id,即客户端机密
  • 为您在WSO2中注册的特定OAuth2移动客户端禁用“client_credentials”授权类型,以便这些应用程序在没有用户身份验证的情况下无法获取访问令牌
  • 更进一步,如果您需要为移动应用程序的每个实例拥有唯一的客户端凭据,那么使用OAuth2动态客户端注册(DCR)动态生成客户端凭据

  • 通过遵循上述5条建议,它为您提供了与规范中建议的相同级别的安全性。

    对于授权授予流,您可以使用空的客户端密钥发送请求。试着像这样放置空字符串
    client\u secret=''
    ,它应该可以正常工作。如果没有