1. 개요:
웹 서비스는 기업이 특정 비즈니스 요구를 충족하기 위해 제공하는 온라인 애플리케이션 서비스입니다. 다른 회사나 애플리케이션 소프트웨어는 인터넷을 통해 이 온라인 서비스에 액세스하고 사용할 수 있습니다. 논리적으로 다른 애플리케이션에 데이터와 서비스를 제공합니다. 각 애플리케이션은 네트워크 프로토콜과 일부 지정된 표준 데이터 형식(Http, XML, Soap)을 통해 웹 서비스에 액세스하고 웹 서비스의 내부 실행을 통해 필요한 결과를 얻습니다. 인터넷을 통해 호출되기 때문에 네트워크 사용자가 호출할 수 있는 보안상의 문제가 있을 수밖에 없습니다. 웹 서비스 접근 권한 제한을 구현하는 방법은 웹 서비스 사용자가 직면한 중요한 문제입니다. 다음은 위의 문제를 얕은 것부터 깊은 것까지 해결하는 두 가지 솔루션입니다.
2. "soapheader" 기능을 기반으로 한 간단한 메소드
1. "soapheader" 개요
SOAP 헤더는 XML 웹 서비스 메소드에 데이터를 전달하는 메소드를 제공합니다. 데이터가 XML Web services 메서드의 기본 기능과 직접적으로 관련되지 않은 경우 XML Web services 메서드에서 가져옵니다. 대부분의 경우 사용자 인증 정보를 전송하는 데 사용됩니다. 물론 그 역할은 그 이상이며 실제 응용 분야에서는 아직 발견되지 않았습니다.
2. Soapheader는 사용자 인증 코드를 구현합니다
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace UserCenter { public class MySoapHeader :SoapHeader { public string UserName { get; set; } public string PWD { get; set; } } /// <summary> /// MyMath 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class MyMath : System.Web.Services.WebService { public MySoapHeader sHeader; [WebMethod] public string HelloWorld() { return "Hello World"; } [WebMethod] [SoapHeader("sHeader")] public string add(int x, int y) { if (sHeader.UserName == "test" && sHeader.PWD == "test") { return (x + y).ToString(); } else { return null; } } } }
3. 단점 분석:
(1) 서비스 로직과 사용자 권한 확인 로직이 혼합되어 프로그램이 늘어납니다. 복잡성을 이해하십시오.
(2) 권한 로직의 재사용성이 높지 않습니다
2. "SoapExtensionAttribute" 기능을 기반으로 하는 방법
1. SoapExtensionAttribute 및 SoapExtension 개요
SoapExtension 및 SoapExtensio. 두 개의 Attribute 클래스는 웹서비스의 직렬화 및 역직렬화의 일반적인 과정을 제어하는데 사용되며, 웹서비스의 압축, 로깅 등의 기능을 제어할 수 있습니다.
2. 구현 코드
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; namespace XMLClass1.class15.content { [AttributeUsage(AttributeTargets.Method)] public class MyExtensionAttribute : SoapExtensionAttribute { int _priority = 1; public override int Priority { get { return _priority; } set { _priority = value; } } public override Type ExtensionType { get { return typeof(MyExtension); } } } public class MyExtension : SoapExtension { //这个override的方法会被调用四次 //分别是SoapMessageStage BeforeSerialize,AfterSerialize,BeforeDeserialize,AfterDeserialize public override void ProcessMessage(SoapMessage message) { if (message.Stage == SoapMessageStage.AfterDeserialize)//反序列化之后处理 { bool check = false; foreach (SoapHeader header in message.Headers) { if (header is MySoapHeader) { MySoapHeader myHeader = (MySoapHeader)header; if (myHeader.Name == "admin" || myHeader.PassWord == "admin") { check = true; break; } } } if (!check) throw new SoapHeaderException("认证失败", SoapException.ClientFaultCode); } } public override Object GetInitializer(Type type) { return GetType(); } public override Object GetInitializer(LogicalMethodInfo info, SoapExtensionAttribute attribute) { return null; } public override void Initialize(Object initializer) { } } public class MySoapHeader : SoapHeader { string _name; string _passWord; public string Name { get { return _name; } set { _name = value; } } public string PassWord { get { return _passWord; } set { _passWord = value; } } } /// <summary> /// headersoap2 的摘要说明 /// </summary> [WebService(Namespace = http://tempuri.org/)] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 // [System.Web.Script.Services.ScriptService] public class headersoap2 : System.Web.Services.WebService { public MySoapHeader header; [WebMethod] [MyExtensionAttribute] [SoapHeader("header", Direction = SoapHeaderDirection.In)] public string CheckHeader() { //业务逻辑. return "Something done"; } } }
는 다음과 같습니다. Webservice 모든 보안 설정에 참고가 되길 바라며, PHP 중국어 홈페이지도 지원해주시길 바랍니다.
ASP.NET의 웹 서비스 보안 및 액세스 제어와 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!