【问题标题】:wso2 api mgr: oauth not workingwso2 api mgr:oauth 不工作
【发布时间】:2014-10-30 02:53:38
【问题描述】:

在安装 wso2 mgr 并在 jdbi 中进行小改动以使用我们的 mysql 服务器后,除了 oauth 之外,一切“似乎”都可以工作。

在 carbon web UI 中,当我单击“oauth”上的左侧菜单时,我收到一条错误消息

System Error Occurred - Error occurred while reading OAuth application data

我查看了其他帖子和saw this。我查看了${WSO2_IS_HOME}/repository/conf/identity.xml,我看到我有一个条目<skipdbschemacreation>true</skipdbschemacreation>

我尝试将其更改为 false 并且没有更改...

有人对 wso2 apu mgr 有这个问题吗?

知道如何在 api mgr 中设置 oauth 吗?

我必须安装 wso2 身份管理器吗?

----update1 ------

似乎将此标志更改为 false 会导致我们的数据库出现问题,因为我们现在收到一条错误消息。当您将此标志重置为 true 时,db 错误仍然存​​在...

错误信息说

[2012-08-19 15:40:13,649] 错误 - JDBCResourceDAO 无法删除 id 为 688 的资源。无法执行语句:由于 BINLOG_FORMAT = STATEMENT 并且至少一个表使用存储引擎,因此无法写入二进制日志仅限于基于行的日志记录。当事务隔离级别为 READ COMMITTED 或 READ UNCOMMITTED 时,InnoDB 仅限于行日志记录。 java.sql.SQLException:无法执行语句:无法写入二进制日志,因为 BINLOG_FORMAT = STATEMENT 并且至少一个表使用仅限于基于行的日志记录的存储引擎。当事务隔离级别为 READ COMMITTED 或 READ UNCOMMITTED 时,InnoDB 仅限于行日志记录。

后来 wso2 启动脚本说:

[2012-08-19 15:40:13,654] 致命 - CarbonServerManager WSO2 Carbon 初始化失败 org.wso2.carbon.registry.core.exceptions.RegistryException:无法删除 id 为 688 的资源。无法执行语句:无法写入二进制日志,因为 BINLOG_FORMAT = STATEMENT 并且至少一个表使用仅限于行的存储引擎-基于日志记录。当事务隔离级别为 READ COMMITTED 或 READ UNCOMMITTED 时,InnoDB 仅限于行日志记录。

稍后在我们拥有的同一个启动脚本中

org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) 原因:java.sql.SQLException:无法执行语句:由于 BINLOG_FORMAT = STATEMENT 并且至少一个表使用仅限于基于行的日志记录的存储引擎,因此无法写入二进制日志。当事务隔离级别为 READ COMMITTED 或 READ UNCOMMITTED 时,InnoDB 仅限于行日志记录。

【问题讨论】:

    标签: api oauth wso2 wso2-am


    【解决方案1】:

    skipdbschemacreation 属性是在引入 WSO2 APIManager 之后专门引入的。这是因为 WSO2 APIManager 有一个单独的 sql 脚本来创建所有必需的表(包括 OAuth2.0 相关表)。因此,有必要在服务器启动时跳过 OAuth 组件的模式创建步骤。因此,此属性在 WSO2 APIManager 中默认设置为 'true' 并在 WSO2 Identity Server 中设置为 false 是正确的。

    您面临的问题应该是因为您指向 MySQL 数据库的配置不正确。如果您使用的是 MySQL 数据库,则应配置其设置的位置是 {WSO2_APIMANAGER_HOME}/repository/conf/datasources/master-datasources.xml。更改名称为 WSO2AM_DB 的数据源的设置。这是具有 OAuth2.0 相关表的数据源。

    例如

            <datasource>
                <name>WSO2AM_DB</name>
                <description>The datasource used for API Manager database</description>
                <jndiConfig>
                    <name>jdbc/WSO2AM_DB</name>
                </jndiConfig>
                <definition type="RDBMS">
                    <configuration>
                        <url>jdbc:mysql://localhost:3306/wso2am_db</url>
                        <username>admin</username>
                        <password>admin@123</password>
                        <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                        <maxActive>50</maxActive>
                        <maxWait>60000</maxWait>
                        <testOnBorrow>true</testOnBorrow>
                        <validationQuery>SELECT 1</validationQuery>
                        <validationInterval>30000</validationInterval>
                    </configuration>
                </definition>
            </datasource>
    

    我假设您已经通过运行 {WSO2_APIMANAGER_HOME}/dbscripts/apimgt/mysql.sql 中提供的 mysql.sql 脚本创建了所需的数据库架构。

    为 WSO2 APIManager 创建 MySQL 数据库架构:

    1. 导航到您拥有用于创建 WSO2AM_DB 的 mysql 脚本的位置。

    2. 从该位置打开命令提示符并从 cmd 提示符登录到 mysql

      mysql -u root -p

    3. 创建一个数据库。创建用户并授予访问权限。

      创建数据库apimgt;

    4. GRANT ALL ON apimgt.* TO admin@localhost IDENTIFIED BY "admin";

    5. 运行 mysql.sql 脚本。这将配置数据库。

      使用 apimgt;

      源mysql.sql;

    【讨论】:

    • 问题现已结束。所有这些都来自于 carbon webUI 上的 oauth 不起作用的事实。我在 {WSO2_APIMANAGER_HOME}/repository/apimgt/mysql.sql 中发现了这一点。您有一个名为 apimgr 的子目录,其中包含第二个 mysql.sql 脚本...一旦我运行它,所有缺少的 idn_* 表都已创建,并且到目前为止一切似乎都正常...也许您可以自动启动第二个脚本或者写在需要运行它的地方?无论如何感谢您的支持....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多