如何使用授权代码流为IOS客户端设置Identity Server 3

时间:2016-08-29 08:25:03

标签: ios security oauth-2.0 identityserver3 openid-connect

最近我一直在玩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上为我设置。

1 个答案:

答案 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应用程序在移动设备上启动。