WSO2 API Mgr:OAuth 不起作用



在安装了WSO2 mgr并在JDBI中进行了一些小的更改以使用我们的MySQL服务器之后,除了OAuth之外,一切"似乎"都可以工作。

在Carbon Web UI中,当我单击"oauth"上的左侧菜单时,我会收到一条错误消息,指出

System Error Occurred - Error occurred while reading OAuth application data

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

我尝试将其更改为假数,但没有更改...

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

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

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

----更新1 ------

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

错误消息显示

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

后来 WSO2 启动脚本说:

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

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

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

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 根 -p

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

    创建数据库接口;

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

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

    使用 apimgt;

    来源 MySQL.sql;

最新更新