身份服务器 4/nativescript 挂起
Posted
技术标签:
【中文标题】身份服务器 4/nativescript 挂起【英文标题】:Identity Server 4/nativescript Hangs 【发布时间】:2019-05-27 14:17:00 【问题描述】:我有以下客户:
new Client
ClientId = "nativeapptest",
ClientName = "Native App Test",
Enabled = true,
RequireClientSecret = false,
AllowedGrantTypes = GrantTypes.Code,
RedirectUris = "com.mysite.nativeapp.12365789785256-buv2dwer7jjjjv5fckasdftn367psbrlb:/home" ,
AllowedScopes =
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"MyScope"
,
RequirePkce = false,
AllowOfflineAccess = true,
RequireConsent = false
我正在使用本机脚本构建一个可以使用 Identity Server 4 登录的 android 应用程序。目前发生的情况是,我通过打开浏览器并使用所有正确的 OpenID 配置向 IS4 发出请求,我最终在然后我选择使用 Google 登录的登录屏幕。一旦在谷歌上,我输入我的电子邮件和密码,一切都很好,然后谷歌试图把我送回我的网站,但它只是挂起......它是一个没有加载的白页,它只是永远坐在那里,没有错误据我所知,is4 记录的消息。
上面的nativescript登录部分来自OAutho2库https://www.npmjs.com/package/nativescript-oauth2
我试图了解这会是 IS4 还是原生 Android 应用程序的问题。页面是否挂起,因为它正在等待 android 应用程序接管登录工作?也许问题出在 RedirectURI 方案上?
它挂的网址如下:
http://login.mysite.com/connect/authorize?client_id=nativeapptest&response_type=code&redirect_uri=com.mysite.nativeapp.12365789785256-buv2dwer7jjjjv5fckasdftn367psbrlb%3A%2Fhome&scope=openid%20profile%20MySite&response_mode=query&st
编辑:
由于我是在实际服务器上运行它,我无法直接对其进行调试,但是,我确实添加了日志以查看代码的运行情况。我的日志告诉我用户是通过 google 和我的系统登录的,我的日志还显示 ExternalCallback 已将页面重定向到
/connect/authorize/callback?client_id=nativeapptest&response_type=code&redirect_uri=com.mysite.nativeapp%3A%2F%2Fhome&scope=openid%20profile%20MyScope&response_mode=query&state=abcd
此时,页面挂起。
请注意,我们将 RedirectUri 更改为 com.mysite.nativeapp 以帮助进行测试。
最后,我不确定这是否重要,但我们不使用 https,因为这仍处于开发阶段。
【问题讨论】:
重定向 URI 必须是 Web URL。您不能重定向到这样的应用程序。您使用了错误的授权类型进行身份验证。 @DaImTo 那么我应该使用 Hybrid 吗?另外,如果它是一个网页 URL,那么我想如何重定向回移动应用程序? URL 应该是什么样子,因为我们输入的任何内容都不存在,还是应该存在?你能举个例子吗? @Bojan 您是否使用 Chrome DevTools Network 选项卡和/或 Windows 上的 Fiddler 或 Mac 上启用 https 解密的 Charles Proxy 看过这个?如果没有,您需要执行其中一项或两项操作,以明确确定它正在调用的确切 URL、它传递的标头以及它得到的响应(如果有的话)。一旦确定,您可以使用调试器或日志记录打开您的服务代码,看看为什么它没有从该方法返回响应。除非您已完成上述操作,否则任何人都无法解决此问题,这将使您能够解决它。 google注册的回调是什么localhost:5000/signin-google @MohamedElrashid 我已经更新了答案。它也不是 localhost,它的 mysite.com(出于安全原因不包括实际名称) 【参考方案1】:当我开始我的项目时,我决定在我的自定义 url 方案中使用大写。
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Custom URL Schemes -->
<data android:scheme="com.mydomain.MyApp"/>
</intent-filter>
我在 ApplicationManifest.xml 和 IdentityServer4 客户端配置中将其更改为小写,一切都开始工作了。
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Custom URL Schemes -->
<data android:scheme="com.mydomain.myapp"/>
</intent-filter>
身份服务器4
RedirectUris = $"com.mydomain.myapp://auth" ,
【讨论】:
【参考方案2】:我遇到了同样的问题,我意识到自定义 url 方案没有正确注册。我不得不在模拟器中重新安装该应用程序。正确更新 AndroidManifest.xml 并擦除模拟器的数据后,它就可以工作了。
【讨论】:
【参考方案3】:刚刚完成了示例应用
步骤 01
我们将打开一个运行窗口
在键盘上按下
Windoes Key + R
等待
步骤 02
我们将打开一个 cmd 窗口
在运行窗口文本输入写入
cmd
在键盘上按下
Enter
步骤 03
我们将创建一个目录并使其成为我们 cmd 的工作目录
在 CMD 窗口写入
mkdir D:\Experiments\E.IDser.NativeScript
cd /d D:\Experiments\E.IDser.NativeScript
步骤 04
我们将克隆示例项目
在 CMD 窗口写入
git clone https://github.com/Elrashid/nativescript-client-and-identity-server-sample.git
cd nativescript-client-and-identity-server-sample
步骤 05
现在将运行应用程序
在 CMD 窗口写入
Start.bat
步骤 06
如何使用
为什么
1 app
+---+
|
identity |
2 server |
|
|
|
3 google +-+ user
| intractiom
|
| your
identity | app
4 server | <---+ stop
+---+ here
5 app +---+
|
|
|
identity +--+ background
6 server |
|
|
7 app |
+--+
见 register a custom URL scheme for Android
<data
android:path="/home"
android:scheme="com.mysite.nativeapp
.12365789785256-buv2dwer7
jjjjv5fckasdftn367psbrlb"
/>
你也可以试试
tns debug android
错误无法访问此站点
Identity Server 和 Native-Script 之间的通信
运行
nativescript-client-and-identity-server-sample/Start.bat
不要跑跑
"nativescript-client-and-identity-server-sample/identity-server/Start.bat"
"nativescript-client-and-identity-server-sample/nativescript-client/Start.bat"
原生脚本应用应该在安卓模拟器中运行
身份服务器应该运行在本地机器的 5010 端口
检查您可以打开的 Windows 浏览器
http://localhost:5010
如果是的话
检查你的**android模拟器**浏览器,你可以打开
http://10.0.2.2:5010
什么是 10.0.2.2 ?
special alias to your android emulator host loopback interface
我可以更改我的主机 10.0.2.2 的位置吗?
打开 nativescript-client\app\my-oauth-provider.ts
public authority = "http://10.0.2.2:5010";
public tokenEndpointBase = "http://10.0.2.2:5010";
public cookieDomains = ["10.0.2.2:5010"];
把http://10.0.2.2:5010改成你的网址
【讨论】:
今晚我会看看这个并试一试。感谢您发布它,我会让您知道情况如何。 您好 Mohammed,我尝试运行您的示例,当我点击“登录”时,它会尝试加载,然后显示“无法访问此站点”。http://10.0.2.2:5010/connect/authorize?client_id=js&response_type=code&redirect_uri=com.googleusercontent.apps.932931520457-buv2dnhgo7jjjjv5fckqltn367psbrlb%3A%2Fauth&scope=openid%20app2api%20offline_access&response_mode=query&state=abcd is unreachable. Search Google for 5010 connect authorize
我们仍在测试过程中,并试图让您的应用与我们的服务器一起工作,看看我们哪里出了问题。别担心,我不会让赏金到期。只是想先让它工作,以防我们有更多问题。
不幸的是,我们遇到了硬件问题,我们需要更长的时间才能解决所有这些问题。由于赏金即将到期,我已将其授予您,因为您的榜样使我们至少离我们的位置更远了一步。在电脑出现故障之前,我们能够连接到我们的服务器并被重定向回应用程序,所以我们通过了之前的白屏,但是,我们无法检索到最终结果的 JTW 令牌,所以我们要修好电脑,然后继续尝试。以上是关于身份服务器 4/nativescript 挂起的主要内容,如果未能解决你的问题,请参考以下文章