身份服务器 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&amp;response_type=code&amp;redirect_uri=com.googleusercontent.apps.932931520457-buv2dnhgo7jjjjv5fckqltn367psbrlb%3A%2Fauth&amp;scope=openid%20app2api%20offline_access&amp;response_mode=query&amp;state=abcd is unreachable. Search Google for 5010 connect authorize 我们仍在测试过程中,并试图让您的应用与我们的服务器一起工作,看看我们哪里出了问题。别担心,我不会让赏金到期。只是想先让它工作,以防我们有更多问题。 不幸的是,我们遇到了硬件问题,我们需要更长的时间才能解决所有这些问题。由于赏金即将到期,我已将其授予您,因为您的榜样使我们至少离我们的位置更远了一步。在电脑出现故障之前,我们能够连接到我们的服务器并被重定向回应用程序,所以我们通过了之前的白屏,但​​是,我们无法检索到最终结果的 JTW 令牌,所以我们要修好电脑,然后继续尝试。

以上是关于身份服务器 4/nativescript 挂起的主要内容,如果未能解决你的问题,请参考以下文章

Nodejs,Cloud Firestore上传任务 - 身份验证错误:错误:套接字挂起

身份验证后重定向期间请求挂起

请求在身份验证后重定向期间挂起

在 SVN 中如何覆盖自动 Windows 域身份验证

如何获取当前用户的windows身份?

护照认证回调挂起