编辑:我一直在解决这个问题并回顾我的所有步骤。我很乐意缩小这个问题的规模,并在令人困惑的情况下获得更多确切的细节。目前,我觉得 Keycloak 似乎只想将我重定向到 https://,据我所知,这应该是 Wildfly 服务器配置问题。
编辑:我减少了我的问题,但这引起了混乱,所以我将问题回滚到原来的问题,最相关的部分在底部,我将在其中注意到这一点
我正在抓狂地试图找出可能导致这个问题的原因。
我在 Android studio 的模拟器上收到以下错误消息:
我正在使用身份管理系统 Keycloak - 我稍后会回顾这一点。
我尝试将我的 CSP 更改为非常宽松:
<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-eval' 'unsafe-inline'; media-src *; img-src 'self' * data:"
/>
我已经安装了 inappbrowser,我已经在 config.xml 中相当自由地设置了我的意图和允许导航:
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<allow-intent href="gap://*" />
<allow-intent href="APPNAMEHERE://*/*" />
<allow-intent href="fb://*/*" />
<allow-intent href="http://stage.APPNAMEHERE.com://*/*" />
<allow-intent href="https://stage.APPNAMEHERE.com://*/*" />
<allow-navigation href="https://localhost/*"/>
<allow-navigation href="http://localhost/*"/>
<preference name="Hostname" value="localhost" />
<preference name="Scheme" value="https" />
<preference name="MixedContentMode" value="0" />
<access origin="*" />
<allow-navigation href="*" />
<allow-navigation href="localhost://*/*" />
<allow-navigation href="APPNAME://*/*" />
<allow-navigation href="fb://*/*" />
<allow-intent href="*" />
<allow-navigation href="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="*" />
基本上我已经尝试让这个应用程序尽可能宽松,但仍然没有成功进行身份验证。
但还有更奇怪的事情。
我有另一个完全不相关的应用程序,但它也使用相同的身份管理系统。我一时高兴地决定,因为我非常想尝试连接这里的该服务,而且它运行得完美无缺 - 没有任何问题。
我尝试从其他 Keycloak(一堆配置设置)导出客户端并使用它们进行微小的更改,并且没有骰子。还是同样的错误。
此时我简直要抓狂了,我一直在不断尝试不同的事情,并点击“登录”几个小时,结果却完全相同。
什么可能阻止我登录?
请注意,有一个 iOS 应用程序可以在相同的设置上完美运行,因此它不是设置。
我正在通过 OIDC 连接,如果这对任何人有帮助的话。
很抱歉我无法提供更多信息,我希望我能找到一些东西,任何可以掌握的东西,但我在这里完全迷失了,无论我做什么,它似乎都无法找到本地主机。
Android 控制台(我在 Chrome 检查器中没有看到什么特别的):
2019-08-31 10:56:42.002 12062-12191/com.companyname.appname D/InAppBrowser: target = _blank
2019-08-31 10:56:42.003 12062-12062/com.companyname.appname D/InAppBrowser: in blank
2019-08-31 10:56:42.054 12062-12164/com.companyname.appname E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-08-31 10:56:42.054 12062-12164/com.companyname.appname E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-08-31 10:56:42.168 12062-12170/com.companyname.appname D/EGL_emulation: eglMakeCurrent: 0xf0677ba0: ver 3 0 (tinfo 0xd6778770)
2019-08-31 10:56:42.325 12062-12170/com.companyname.appname D/EGL_emulation: eglMakeCurrent: 0xf0677ba0: ver 3 0 (tinfo 0xd6778770)
2019-08-31 10:56:42.501 12062-12170/com.companyname.appname D/EGL_emulation: eglMakeCurrent: 0xf0677ba0: ver 3 0 (tinfo 0xd6778770)
请注意,我已将其所在公司的公司名称替换为“companyname”,并将应用程序名称替换为“appname”
EDIT:
我在尝试一个非常基本的 keycloak 实现时也注意到了这个错误(这里的玩具示例:https://github.com/keycloak/keycloak/blob/master/examples/cordova/www/index.html https://github.com/keycloak/keycloak/blob/master/examples/cordova/www/index.html)在我的前端:
keycloak.js:1000 Uncaught (in promise) undefined
setError @ keycloak.js:1000
(anonymous) @ keycloak.js:1261
Channel.fire @ cordova.js:840
_eventHandler @ inappbrowser.js:53
cb @ inappbrowser.js:118
callbackFromNative @ cordova.js:290
(anonymous) @ VM68:1
keycloak.js 中的相关代码涉及创建本机承诺:
function createNativePromise() {
// Need to create a native Promise which also preserves the
// interface of the custom promise type previously used by the API
var p = {
setSuccess: function(result) {
p.success = true;
p.resolve(result);
},
setError: function(result) {
p.success = false;
p.reject(result);
}
};
可能与inappbrowser有关吗?
问题的实际相关部分
编辑2:深入挖掘......
错误在这里抛出。
所以我的猜测是,这是由于我的重定向网址以某种方式https://本地主机 https://localhost而不是http://localhost http://localhost,因为这就是我的重定向 URI。
ref.addEventListener('loaderror', function(event) {
if (!completed) {
if (event.url.indexOf('http://localhost') == 0) {
var callback = parseCallback(event.url);
processCallback(callback, promise);
closeBrowser();
completed = true;
} else {
promise.setError();
closeBrowser();
}
}
});
https://localhost/#state=3bc5b8e8-ee17-4c78-861c-6fa62f5e353b&session_state=43d5518d-c278-4245-b181-899783fd2c6b&code=8e50a9c0-d1a6-4ecd-8e91-e85d92350900.43d5518d-c278-4245-b181-899783fd2c6b.863570ca-9c62-41a5-97bb-33880fe6c62d
即使在尝试时:
keycloak.init({ onLoad: "check-sso", redirectUri: "http://localhost" })
我仍然收到上面的 https:// 重定向 uri,我强烈认为这是造成我的错误的原因。
My strong目前猜测这可能与 Keycloak(使用 Wildfly)配置设置有关。
这是我在 Wildfly 中的服务器设置:
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="http" proxy-address-forwarding="true" enable-http2="true"/>
<https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<http-invoker security-realm="ApplicationRealm"/>
</host>
</server>