【问题标题】:Xamarin.Auth or IdentityModel + IdentityServer4Xamarin.Auth 或 IdentityModel + IdentityServer4
【发布时间】:2019-07-26 19:56:17
【问题描述】:
是否有人使用 Xamarin.Auth 或 IdentityModel 实现了 IdentityServer4 身份验证?
我尝试过同时使用 IdentityModel 和 Xamarin.Auth,但从外观上看,它们都缺少一些功能。
我似乎找不到在 Xamarin.Auth 的 OAuth2Authenticator 中设置 response_type 和 response_mode 的方法。
但我喜欢如何打开本机浏览器并收听其完成/错误事件。在这种情况下,对于未经授权的客户端来说显然会出错,因为我们在 .Net Core 中的 IdentityServer4 需要 response_type 和 response_mode。
我似乎找不到使用 IdentityModel 与本机浏览器交互的方法。我读到推荐的方法是使用外部/本机浏览器而不是 web 视图。除此之外,我在使用 webview 尝试向 google 进行身份验证时收到 disallowed_useragent 错误。
【问题讨论】:
标签:
authentication
xamarin
xamarin.forms
xamarin.ios
identityserver4
【解决方案1】:
已解决。我最终使用 Xamarin.Auth 与 IdentityServer4 一起工作(至少目前在 iOS 中),因为 Google 身份验证(不是 android)对使用带有 IdentityModel 的 WebView 不满意。
其他开发人员可能会遇到与使用 IdentityServer4 的 OAuth2Authenticator 类似的问题的注意事项,以下是发生的事情以及对我有用的事情:
原来在 IdentityServer4 中不需要 response_type 和 response_mode,因为我们在服务器中有默认设置。
-
我的主要问题是当 Xamarin.Auth 请求令牌时出现“client_unauthorized”错误,因为 RedirectUrl 末尾有斜线,而配置的 RedirectUrl 没有。
- 初始化 OAuth2Authenticator 时,我的 RedirectUrl 末尾没有斜杠
- 在调用 OneListAppContext.AuthenticationState.Authenticator.OnPageLoading(url) 之前,我在 AppDelegate.cs 中的 OpenUrl 方法内将 NSUrl 转换为 Uri 时,神奇地添加了末尾的额外斜线。
- 我想在 url 查询中的问号前有一个斜线是一个标准吗?如果是,我不知道,因为在 url 中添加 ?name=value 总是有效的。
- 在 OpenUrl 方法中来自 Safari 的 NSUrl 是 myappname://oauth?code=1ec450f88737fcae0a2786699d5df24e3ca97a8b55c09da2ef13d58035821134...
- 将 NSUrl 转换为 Uri 后的新 Uri 是 myappname://oauth/?code=1ec450f88737fcae0a2786699d5df24e3ca97a8b55c09da2ef13d58035821134...(注意在 oauth 之后有 /)
修复非常简单:
1. 将我的客户端配置的 RedirectUrl 更改为以 / 结尾(例如 myappname://oauth/)
2. 在客户端初始化 RedirectUrl 以使 OAuth2Authentic 以 / 结尾(例如 myappname://oauth/)