为Xamarin应用程序设置识别服务器

图像显示服务器机架

您是否曾想知道设置使用行业标准和可从您的手机Xamarin应用程序使用的最小可行身份验证服务器的困难?好吧,我有,我相信已经找到了一个可以成为一个伟大起点的解决方案,并将让您扩展答案,您是否需要这样做。

一个普通的行业标准是Openid. / OAuth2,它提供了标准化认证机制,可安全可靠地允许用户识别。您可以将身份服务视为标识用户的Web服务器,并提供客户端(网站/移动应用程序等)以与所述客户端使用的另一个应用程序服务器验证本身。

OAuth代码流程图

虽然OAuth标准对具有计算机和Internet连接的任何人都可以打开,但我通常不建议您编写自己的实现。我的进入解决身份提供商的解决方案是IdentityServer经过多米尼克拜耳布洛伦.

在撰写本文时,IdentityServer5已被释放duende软件。一家由Dominick Bayer和Brock Allen创立的公司。与公司的许可证有一些变化。您仍然可以免费使用Duende IdentityServer,以便您可以在此处找到某些方案。然而,对于这篇文章,我们将坚持身份证4。

IdentityServer4.基于OAuth规范构建。它是基于可信的ASP.NET核心,但需要相当诀窍来获取配置和其他设置准备使用。幸运的是我的好朋友Damien Bowden.已创建一个快速入门模板,可以通过DotNet命令行安装,然后制作服务器。你可以找到存储库这里在github上。在遵循之后安装说明,我们可以使用以下命令创建一个服务器:

dotnet new sts -n XamarinIdentity.Auth

The solution is pretty much ready to go but let's look at the configuration of the IdentityServer in Config.cs和make some adjustments in the GetClients method. Based on the template, let's make some changes that leave us with the following final configuration:

public static IEnumerable<Client> GetClients(IConfigurationSection stsConfig)
{
    return new List<Client>
    {
        // mobile client
        new Client
        {
            ClientName = "mobileclient-name-shown-in-logs",
            ClientId = "the-mobileclient-id-of-your-choice",
            AllowedGrantTypes = GrantTypes.Code,
            AllowOfflineAccess = true, // allow refresh tokens
            RequireClientSecret = false,
            RedirectUris = new List<string>
            {
                "com.mallibone.oidcsample/authorized"

            },
            PostLogoutRedirectUris = new List<string>
            {
                "com.mallibone.oidcsample/unauthorized",
            },
            AllowedScopes = new List<string>
            {
                "openid",
                "role",
                "profile",
                "email"
            }
        }
    };
}

Generally, you can set the ClientName, ClientId, RedirectUrisPostLogoutRedirectUris至values of your choosing. The scopes represent the defaults. Further note that by setting AllowOfflineAccess至true, the user can request 刷新令牌这意味着只要刷新令牌有效,用户就不必登录,但可以使用所述刷新令牌来请求新的访问令牌。在移动应用程序中,这通常是优先的行为,因为用户通常拥有他们的个人设备,因此期望应用程序“存储”他们的登录。

在我们部署此小狗之前唯一剩下的是我们确保我们存储用户。

将登录凭据存储在数据库中很好,因为在重新启动服务时通常会导致相当令人沮丧。我们配置的QuickStart解决方案附带了sqlite.数据库每个默认值。虽然您可能会在某些时候大约在某些时候大约出SQLite数据库,但如果您只使用了几个用户使用它,则它运行得很好。要使用SQLite,您将必须设置复制到输出目录如果较新的话 of the userdatabase.sqlite or it will not deploy during a build. And please note that the SQLite database will be created anew on every deploy - so this is purely for development purposes. 😉

请注意,使用SQLite版本是一种快速且简单的方法,可以在本地和云中获取和运行identityServer。但是,我并不是说你不应该使用SQL,PostgreSQL,MySQL或您可能已经在生产中运行的任何其他数据库使用。如果您计划使用不同的数据库,请随时配置ASP.NET核心启动中所需的更改。

接下来,我们希望部署我们的解决方案,以便客户可以调用它。由于身份服务是ASP.NET核心Web应用程序,我们可以将其部署到任何Web服务器。例如,您可以使用Azure Web服务。部署服务器后,您可以访问它,注册新用户并验证客户端。当然,您可以进一步编辑服务器以满足您的需求和愿望,在这种情况下官方文件将具有很大的价值。

这就是它 - 随着这几个更改,您可以在云中运行一个完全运行的IdentityServer,您现在可以开始将其集成到您的应用中,知道您正在使用行业标准进行身份验证和识别您的用户。你可以找到一个样本GitHub..

Hth.

标题照片byPanumas Nikhomkhaipexels.

更新: