我有以下客户端:
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如下:
编辑:
由于我是在实际服务器上运行此命令,因此无法直接对其进行调试,但是,我确实添加了日志以查看代码的执行范围。我的日志告诉我用户已通过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,因为这仍处于开发阶段。
答案 0 :(得分:5)
我们将打开一个运行窗口
在键盘上按
Windoes Key + R
等待
我们将打开一个cmd窗口
在“运行”窗口中,输入文字
cmd
在键盘上按
Enter
我们将创建一个目录并将其作为cmd的工作目录
在CMD窗口上写
mkdir D:\Experiments\E.IDser.NativeScript
cd /d D:\Experiments\E.IDser.NativeScript
我们将克隆示例项目
在CMD窗口上写
git clone https://github.com/Elrashid/nativescript-client-and-identity-server-sample.git
cd nativescript-client-and-identity-server-sample
现在将运行应用程序
在CMD窗口上写
Start.bat
使用方法
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
运行
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模拟器中运行
身份服务器应在本地计算机上的端口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" },