【问题标题】:How to send OTP to a custom to a user in custom userstore (The database has only one table)如何将 OTP 发送给自定义用户存储中的用户(数据库只有一个表)
【发布时间】:2022-11-03 03:39:04
【问题描述】:

根据这篇文章https://nishothan-17.medium.com/custom-user-store-manager-for-wso2-identity-server-5-11-0-6e23a4ddf1bb,我通过覆盖 UniqueIDJDBCUserStoreManager 类创建了一个自定义用户存储。我的数据库有一张表,其中包含用户名、密码、电子邮件、姓名和电话号码。

我能够成功进行身份验证。但是,我无法将 OTP 发送到用户的电话号码。谁能指导我如何向用户发送 OTP?我必须设置或覆盖哪些属性?任何帮助将不胜感激。

到目前为止,我找不到任何关于此的文档。

【问题讨论】:

  • 是的,但这是一个简单的配置。我的要求是从自定义用户商店执行 SMS OTP。用户存储只有一个表。我认为在我的自定义用户类中没有设置移动声明。我找不到任何有关如何以编程方式设置索赔的文档。

标签: wso2 wso2-identity-server


【解决方案1】:

我猜您将 SMS-OTP 称为第二因素身份验证。你可以参考这篇文档[1]。

您是否有任何错误跟踪以查看是否有任何特定问题需要修复?

参考: [1]https://is.docs.wso2.com/en/latest/guides/mfa/2fa-sms-otp/

【讨论】:

  • 我的要求是从自定义用户商店执行 SMS OTP。用户存储只有一个表。我认为在我的自定义用户类中没有设置移动声明。我找不到任何有关如何以编程方式设置索赔的文档。
【解决方案2】:
  1. 为了向用户发送 SMS OTP,用户的个人资料中应该有一个有效的手机号码。
  2. 为此,您需要相应地更新移动声明的映射属性。
    • 请参阅https://is.docs.wso2.com/en/latest/guides/dialects/edit-claim-mapping/ 并转到移动声明配置。然后更新映射的属性部分。

    • 如果您将自定义用户存储连接为 PRIMARY 用户存储,请将映射属性更改为数据库表的列名称(根据问题的电话号码)与 PRIMARY 用户存储域相对应。

    • 如果您将此自定义用户存储连接为辅助用户存储,请为辅助用户存储域添加另一个映射属性并放置数据库表的列名。

    • 注意:由于您在用户存储中只有一个表,并且手机号码可用作该表中的一列,我提到使用该列名称作为映射属性。然后,您必须在高级配置下添加额外的数据库查询以从数据库中检索该数据。

    1. 然后,您必须在自定义用户存储管理器中覆盖 public Map<String, String> getUserPropertyValuesWithID(String userID, String[] propertyNames, String profileName) throws UserStoreException 方法。您必须在此重写方法中调用自定义数据库查询来检索用户属性。

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 2021-11-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多