最近我一直在玩Thinktecture的Identity Server 3,更具体地说是客户端和流量。现在,我希望了解如何使用授权代码流在本机IOS应用程序和 Identity Server 3 之间进行通信。
到目前为止,我所做的是使用ASP.NET Mvc客户端(混合流)和AngularJS客户端(隐式流)来使用STS(Identity Server 3)。 STS方面看起来像这样:
STS上的隐式流客户端设置:
new Client
{
ClientId = "implicitangularclient",
ClientName = "Angular client (Implicit)",
Flow = Flows.Implicit,
AllowAccessToAllScopes = true,
IdentityTokenLifetime = 10,
AccessTokenLifetime = 120,
// If we want to have SSO between Angular app and MVC app we need to have this option set to
// false for both the flows they implement(hybrid and implicit).
RequireConsent = false,
// redirect = URI of the Angular application
RedirectUris = new List<string>
{
"https://localhost:44555/callback.html",
// for silent refresh
"https://localhost:44555/silentrefreshframe.html"
},
PostLogoutRedirectUris = new List<string>()
{
"https://localhost:44555/index.html"
}
}
STS上的混合流客户端设置:
new Client
{
ClientId = "hybridclient",
ClientName = "Mvc client (Hybrid)",
Flow = Flows.Hybrid,
AllowAccessToAllScopes = true,
// If we want to have SSO between Angular app and MVC app we need to have this option set to
// false for both the flows they implement(hybrid and implicit).
RequireConsent = false,
IdentityTokenLifetime = 10,
AccessTokenLifetime = 120,
// redirect = URI of the MVC application
RedirectUris = new List<string>
{
"https://localhost:44556"
},
// Needed when requesting refresh tokens
ClientSecrets = new List<Secret>()
{
new Secret("hybridflowsecret".Sha256())
},
PostLogoutRedirectUris = new List<string>()
{
"https://localhost:44556"
}
}
好吧,现在我的目标是使用授权代码流设置一个本地IOS应用程序的客户端。我目前没有IOS应用程序,但我希望我可以为这样的客户端进行设置,所以如果有一天我有IOS应用程序,我只能给它客户端ID,客户端名称和我已经定义的客户端密码并让它运行。我试图在互联网上找到例子,但没有成功,所以我开始深入研究它。我现在想知道的是返回网址应该是什么以及如何在客户端处理它。遵循此规范:oauth2-native-apps-03,从section 5开始。它说
为本机应用程序重定向URI有三种主要方法: 自定义URI方案,应用程序声明的HTTPS URI方案和环回 重定向。
到目前为止,非常好,但据我所知,在客户端应用程序中,我们需要注册我以前从未做过的自定义URI方案(我从未做过ios开发一般来说)。更重要的是,我们需要在特定URL(很可能是ReturnUris url)传递到启动授权过程的手机浏览器后打开应用程序。我也花了一些时间在Inter App communication for IOS但是我没有真正得到我的问题的答案:如果我想从IOS应用程序及其设置中抽象出来,我想只配置STS,在STS级别为此案例设置Client对象方面,我怎么能这样做?什么应该重定向uri(据我所知它是一种反向DNS表示法。像com.mycompany.apples之类的东西)?想象一下我是STS管理员,一个物理客户端来找我并说:嘿,我有这个id的IOS应用程序,这个秘密和返回uri,请在你的STS上为我设置。
答案 0 :(得分:1)
以下是使用以下库的Xamarin项目iOS Client example。
如果您打算使用Xamarin,则ViewController.cs具有连接到IdentityServer的登录代码。
var options = new OidcClientOptions
{
Authority = "https://demo.identityserver.io",
ClientId = "native.hybrid",
Scope = "openid profile email api",
RedirectUri = "io.identitymodel.native://callback",
ResponseMode = OidcClientOptions.AuthorizeResponseMode.Redirect
};
_client = new OidcClient (options);
_state = await _client.PrepareLoginAsync ();
AppDelegate.CallbackHandler = HandleCallback;
safari = new SafariServices.SFSafariViewController (new NSUrl (_state.StartUrl));
this.PresentViewController (safari, true, null);
如果您打算使用单页应用程序SPA,那么他们就会使用他们的oidc-client.js库并使用文档sample project。{/ p>
注意:我没有运气使用带有oidc-client.js库的URL方案。我还在调查这个库是否支持这种能力。
如果您计划将Cordova用于您的项目,那么这里是我测试过的来源。注意:如果您没有要测试的iOS设备,可能会遇到一些测试问题。我遇到了这个问题并且能够使用here进行测试,这允许您将Cordova项目推送到测试服务器并通过Intel XDX tool应用程序在移动设备上启动。