为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.

标题照片by. Panumas nikhomkhaipexels.

Updated: