ASP.NET中Webservice安全 实现访问权限控制

2025-05-29 0 24

一、 概述:

  Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。它逻辑性的为 其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果。由于它通过internet进行调用,必然存在网络用户都可以调用的安全问题。如何实现webservice的访问 权限限制,是使用webservice用户使用面临重要的问题,下文就给两种方案,从浅到深解决上面问题。

二、基于“soapheader” 特性的简单方法

1." soapheader" 概述

SOAP 标头提供了一种方法,用于将数据传递到 XML Web services 方法或从 XML Web services 方法传递数据,条件是该数据不直接与 XML Web services 方法的主功能相关。 多数情况下用来传递用户身份验证信息,当然它的作用远不止如此,有待于在实际应用中发掘。

2.soapheader实现用户身份验证代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52
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)权限逻辑重用性不高

二、基于“SoapExtensionAttribute” 特性的方法

1.SoapExtensionAttribute与SoapExtension概述

SoapExtension和SoapExtensio。Attribute两个类用于控制webservice序列化和反序列化的一般过程,可对webservice进行压缩和日志等功能进行控制.

2.实现代码

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187
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的安全设置全部内容,希望能给大家一个参考,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 ASP.NET中Webservice安全 实现访问权限控制 https://www.kuaiidc.com/100204.html

相关文章

发表评论
暂无评论