嵌入式web服务器goahead从移植到使用之用户验证

对于登录验证,goahead此版本已经原生支持了,所以使用非常简单,就只需要修改一个文件即可,下面看下具体怎么操作吧。

goahead提供了三种验证方式分别是:

Web Form Authentication(表单验证)

Basic Authentication(基本验证)

Digest Authentication(摘要验证)

官方推荐使用的是表单验证,另外两种尽量不要使用,所以本文也只讲一下表单验证是怎么操作的,想了解另外两种的话去官网查一下文档就知道了。

web页面是test/web/auth/form目录下的login.html,其内容如下(注意提交的两个字段名必须为usernamepassword,这是在程序里面固定了的):

<html><head><title>login.html</title></head>
<body>
    <p>Please log in</p>
    <form name="details" method="post" action="/action/login">
        Username <input type="text" name="username" value=''><br/>
        Password <input type="password" name="password" value=''><br/>
        <input type="submit" name="submit" value="OK">
    </form>
</body>
</html>

修改route.txt文件,这里直接使用编译后生成好的文件,可以找到下面的内容:

#
#   Form-based authentication for content under /auth/form
#   The login form is /auth/form/login.html. The page to display when logged-in is /auth/form/index.html
#   Everything else under /auth/form is secured and requires the "manage" ability 
#
# 在未登录时能访问的内容,也可以是一个目录
route uri=/auth/form/login.html

# redirect=200@指定登录成功后默认打开的页面,redirect=401@指定登录失败后默认打开的页面
route uri=/action/login methods=POST handler=action redirect=200@/auth/form/index.html redirect=401@/auth/form/login.html
# redirect=200@指定登出后默认打开的页面
route uri=/action/logout methods=GET|POST handler=action redirect=200@/auth/form/login.html
# uri=指定受保护的内容,auth=指定登录的方式,redirect=401@指定登录失败后默认打开的页面
route uri=/auth/form/ auth=form handler=continue abilities=manage redirect=401@/auth/form/login.html

根据需求配置好route.txt文件后,还需要借助一个工具gopass(位于goahead-test同级目录),用于生成登录密码的密文,简单使用示例如下:

goahead: 0: usage: gopass [--cipher cipher] [--file path] [--password password] realm user roles...
Options:
    --cipher md5|blowfish Select the encryption cipher. Defaults to md5
    --file filename       Modify the password file
    --password password   Use the specified password
选项功能
–cipher指定使用的加密方式
–file可指定输出文件
–password要设置的密码
realm此选项对应程序配置文件me.h中宏ME_GOAHEAD_REALM应设置一致
user用户名
roles角色

生成密码密文:

./gopass --cipher md5 example.com wei administrator

我没有使用–file选项输出到文件,它会默认输出到标准输出上,没有设置–password选项的话,需要从标准输入读入,运行后输入两次密码就会生成密码密文了。

修改auth.txt文件,增加新用户,也就是前面生成的那些东西,内容如下:

#
#   auth.txt - Authorization data
#

# name=角色,abilities=权限
role name=person abilities=breathe
role name=user abilities=view,person
role name=administrator abilities=user,manage

user name=julie password=9d8873a123eb506e7f8e84d1f2a26916 roles=user
user name=joshua password=2fd6e47ff9bb70c0465fd2f5c8e5305e roles=administrator,purchase
user name=mary password=5b90553bea8ba3686f4239d62801f0f3 roles=user
user name=peter password=7cdba57892649fd95a540683fdf8fba6 roles=user

# 增加的新用户,注意文件末尾需要一个新行
user name=wei password=f4960c5d45a6f788bf77ef432163463b roles=administrator

现在所有操作就已经完成了,运行如下命令启动goahead服务器(注意前面提到的route.txt与auth.txt文件都是位于test目录下,前面的文章已经做过了,如果服务器运行的目录不是此目录,要么手动指定这两个文件的路径,要么将这两个文件拷贝到运行目录下,不然运行后会提示找不到要打开的url等):

./goahead-test -v --home ../../../test web

打开浏览器,访问127.0.0.1:18080/auth/form/index.html链接,弹出如下的页面:

在这里插入图片描述

可以看到,虽然访问的是index.html页面,但是未登录的情况下,页面被重定向到了登录页面,正确输入用户名和密码后点击ok按钮就可以登录成功了,登录成功后,页面会自动重定向到route.txt文件指定的页面,这里被重定向到了login.html同目录的index.html页面:

在这里插入图片描述

好了,关于goahead的用户验证就讲完了。

本来计划的最后还有一篇用来讲将goahead源代码嵌入到自己的工程中进行开发的,想了一下,这篇文章就取消了,因为目前只遇到了一个配置项修改后没有成功生效,其它正常,可能在下一个更新版本就被修复了,这里只说一下关于mbedtls相关的两个库的移植,如果你尝试直接添加这两个库的源码到自己的工程中进行编译,你会发现编译报了一堆的错,在源代码中有几个宏开关控制的编译选项,在自己的工程中编译报错就是因为这几个宏没有正确的被配置,解决方案就是直接将官方的代码编译后生成的libgoahead-mbedtls.a和libmbedtls.a库添加到工程中,不直接使用相关源码编译即可,如果你感兴趣可以看下官方的Makefile是怎样配置的。

想了解更多goahead相关的细节,建议阅读官方文档,所有的细节都能够在文档中找到,链接如下:

https://www.embedthis.com/goahead/doc/

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值