Identity Server 4 / nativescript挂起

时间:2018-12-30 19:38:11

标签: c# asp.net-core-mvc nativescript identityserver4

我有以下客户端:

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登录。进入Google后,我输入了我的电子邮件和密码,并且一切正常,然后Google尝试将我发送回我的网站,但是它挂起了...它的白页没有加载任何内容,并且永远存在,没有任何错误据我所知,is4记录的邮件。

以上本机脚本的登录部分来自OAutho2库https://www.npmjs.com/package/nativescript-oauth2

我试图了解这是IS4还是本机Android应用程序上的问题。页面是否挂起,因为它正在等待android应用程序接管登录工作? Mabye问题出在RedirectURI方案上吗?

其挂起的URL如下:

  

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,因为这仍处于开发阶段。

3 个答案:

答案 0 :(得分:5)

仅对示例应用程序进行了修饰

步骤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

使用方法

enter image description here enter image description here enter image description here

enter image description here enter image description here enter image description here

为什么

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

Errrr 无法访问此网站

Identity Server和本机脚本之间的

通信

  • 运行

    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"
    
  • 本机脚本应用程序应在android模拟器中运行

    enter image description here

  • 身份服务器应在本地计算机上的端口5010上运行

  • 在您的窗口浏览器中检查可以打开

    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更改为您的网址

答案 1 :(得分:0)

我遇到了同样的问题,我意识到自定义网址方案未正确注册。我必须在模拟器中重新安装该应用程序。正确更新AndroidManifest.xml并清除模拟器的数据后,它便可以正常工作。

答案 2 :(得分:0)

当我开始我的项目时,我决定在我的自定义 url scheme 中使用大写。

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

IdentityServer4

RedirectUris = { $"com.mydomain.myapp://auth" },