wso2 api经理:oauth不工作

时间:2012-08-19 12:48:16

标签: api oauth wso2 wso2-am

安装wso2 mgr并在jdbi中稍作更改后使用我们的mysql服务器,除了oauth之外,所有“似乎”都可以工作。

在碳纤维网用户界面中,当我点击“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碳初始化失败 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仅限于行记录。

1 个答案:

答案 0 :(得分:1)

在引入WSO2 APIManager之后,专门引入了 skipdbschemacreation 属性。这是因为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相关表的数据源。

E.g。

        <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;

    source mysql.sql;