gpt4 book ai didi

rest - 是否可以使用 HTTP BASIC 身份验证保护 ColdFusion 11 REST 服务?

转载 作者:行者123 更新时间:2023-12-01 04:48:31 25 4
gpt4 key购买 nike

我正在 ColdFusion 11 中设置一个简单的 REST 服务。Web 服务器是 Windows Server 2012R2 上的 IIS 8.5。

需要保护此 REST 服务以防止未经授权的用户访问/写入数据。目前,将只有一个授权用户,所以我想保持身份验证/授权尽可能简单。我最初的想法是使用 HTTP BASIC Authentication。

这是 REST 服务的设置:

源目录:C:\web\site1\remoteapi\
REST 路径:库存

为了实现这一点,我在 IIS 中将 REST 服务的源目录配置为仅授权一个用户,禁用匿名身份验证并启用基本身份验证。

当我直接在浏览器中调用源目录(即 http://site1/remoteapi/inventory.cfc?method=read )时,我会看到基本身份验证对话框。

但是,当我尝试请求 REST 路径 ( http://site1/rest/inventory/ ) 时,我完全没有受到挑战。

如何在 REST 路径上实现 HTTP BASIC 身份验证?

最佳答案

因此,由于需要毫不拖延地完成这项工作,我继续使用 Ben Nadel 网站上的一些原则,将自己的身份验证写入 REST 服务 Application.cfc 的 onRequestStart() 方法。这是基本代码,尽管它使用 VARIABLES 范围内的硬编码值来验证用户名和密码,并且也不包含任何实际的“授权”设置:

public boolean function onRequestStart(required string targetPage) {
LOCAL.Response = SUPER.onRequestStart(ARGUMENTS.targetpage);

if (!StructKeyExists(GetHTTPRequestData().Headers, "Authorization")) {
cfheader(
name="WWW-Authenticate",
value="Basic realm=""REST API Access"""
);

LOCAL.RESTResponse = {
status = 401,
content = {Message = "Unauthorized"}
};

restSetResponse(LOCAL.RESTResponse);
}
else {
LOCAL.IsAuthenticated = true;

LOCAL.EncodedCredentials =
GetToken( GetHTTPRequestData().Headers.Authorization, 2, " " );

// Credential string is not Base64
if ( !ArrayLen(
REMatch(
"^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$",
LOCAL.EncodedCredentials
)
)
) {
LOCAL.IsAuthenticated = false;
}
else {
// Convert Base64 to String
LOCAL.Credentials =
ToString(ToBinary( LOCAL.EncodedCredentials ));

LOCAL.Username = GetToken( LOCAL.Credentials, 1, ":" );
LOCAL.Password = GetToken( LOCAL.Credentials, 2, ":" );

if ( LOCAL.Username != VARIABLES.CREDENTIALS.Username
|| LOCAL.Password != VARIABLES.CREDENTIALS.Password
) {
LOCAL.IsAuthenticated = false;
}
}

if (!LOCAL.IsAuthenticated) {
LOCAL.Response = {
status = 403,
content = {Message = "Forbidden"}
};

restSetResponse(LOCAL.Response);
}
}

return LOCAL.Response;
}

关于rest - 是否可以使用 HTTP BASIC 身份验证保护 ColdFusion 11 REST 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44373746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com