gpt4 book ai didi

c# - 向 Azure Web 应用程序上托管的 SOAP WCF 添加简单的安全性

转载 作者:行者123 更新时间:2023-11-30 14:27:13 25 4
gpt4 key购买 nike

我在 Azure Web 应用程序上托管了 SOAP WCF。该服务仅由服务器使用,不包含 UI。我只需要一个服务帐户来验证我的 WCF。我无法使用 oauth,因为它是 SOAP。我已经阅读了一些有关 ACS 的内容,但对于我来说这似乎有点过分了,因为我只想使用一个帐户来保护我的 WCF。我的想法是,我将利用 Azure AD 在那里创建一个服务帐户并使用它来保护服务。

这在网络应用程序上是否可行,或者我是否需要将其托管在网络角色上?无论如何,我如何在基于我的场所的 WCF 上实现简单的安全性?

最佳答案

详细答案示例

经过一般性讨论,这里是建立传输安全+简单密码的详细示例(在 IIS、本地或 Azure 中我刚刚测试过)

这非常简单
- 没有角色,没有基于身份的声明性或程序性控制。
- 身份是硬编码的。
- 没有使用更强的消息安全性(中间人)。
- 传输安全性是最低的,因为基本身份验证不安全。

该安全方案很难实现

<强>1。创建具有传输安全性的 Web 服务

 <system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicBindingConfiguration">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="HelloServiceLibrary.HelloService" behaviorConfiguration="customIdentificationBehavior">
<endpoint address=""
binding="basicHttpBinding"
contract ="HelloServiceLibrary.IHelloService"
name="basicEndpoint"
bindingConfiguration="BasicBindingConfiguration">
</endpoint>

<强>2。声明一个模块以查找 Basic-Auth

<system.webServer>
<modules>
<add name="BasicAuthenticationModule"
type="Security.UserNameModuleAuthenticator,App_Code/Security" />
</modules>
</system.webServer>

<强>3。模块的实现:

public class UserNameModuleAuthenticator : IHttpModule{
...
public void OnAuthenticateRequest(object source, EventArgs eventArgs){
HttpApplication app = (HttpApplication)source;
string authStr = app.Request.Headers["Authorization"];
string username = ...; // from header
string password = ...; // from header
if (username == "gooduser" && password == "password")
{
app.Context.User = new GenericPrincipal(new GenericIdentity(username, "Custom Provider"), null);
}
else
{
DenyAccess(app);
return;
}

4 配置客户端以通过基本身份验证

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicEndpoint">
<security mode="Transport" >
<transport clientCredentialType="Basic"
proxyCredentialType="None"
realm="" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://localhost/TransportUsernameService/HelloService.svc"
binding="basicHttpBinding" bindingConfiguration="basicEndpoint"
contract="SecureServiceReference.IHelloService" name="basicEndpoint" />
</client>
</system.serviceModel>

<强>5。在客户端将**凭据传递到服务器**

HelloServiceClient client = new HelloServiceClient("basicEndpoint",
new EndpointAddress("https://testsecurewebservice.azurewebsites.net/HelloService.svc"));

client.ClientCredentials.UserName.UserName = userName;
client.ClientCredentials.UserName.Password = password;
String msg = client.SayHello(userName);

可能的扩展

  • 创建/管理一些用户(使用 ASP.Net Provider 或自定义库)
  • 担任一些角色
  • 对方法添加一些声明性权限,例如:
[PrincipalPermission(SecurityAction.Demand, Role = "Manager")]

完整的解决方案在这里:http://1drv.ms/1Q5j9w0

问候

关于c# - 向 Azure Web 应用程序上托管的 SOAP WCF 添加简单的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33476440/

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