Xamarin.Auth 或 IdentityModel + IdentityServer4
Posted
技术标签:
【中文标题】Xamarin.Auth 或 IdentityModel + IdentityServer4【英文标题】:Xamarin.Auth or 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 错误。
【问题讨论】:
【参考方案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/)
【讨论】:
以上是关于Xamarin.Auth 或 IdentityModel + IdentityServer4的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Auth:使用 Facebook oauth,如何重定向到我的应用程序?
Xamarin.Auth OAuth Google API,用于Android的用户身份验证