Web サービスセキュリティの詳細
ベーシック認証、相互認証、または WS-Security を使用してセキュリティを強制します。
ベーシック認証
WSDL 文書または SOAP メッセージの投稿の各要求でベーシック認証を適用するには、glide.basicauth.required プロパティを true に設定します。その場合、WSDL または SOAP の各要求には、ベーシック認証プロトコルで指定されているように「認証」ヘッダーを含める必要があります。要求は非インタラクティブであるため、要求の実行中は常に認証ヘッダーが必要になります。
必要かどうかに関わらずベーシック認証情報を提供すると、Web サービスの呼び出し結果として行われるデータの作成または更新が、ベーシック認証情報で提供されたユーザーの代理で実行されるというメリットがあります。たとえば、インシデントレコードを作成すると、ジャーナルフィールドには、デフォルトのゲストユーザーではなく基本認証ユーザーのユーザー ID が割り当てられます。
認証ヘッダーで大文字化ルールを無視するには、glide.security.script.include.name.case.insensitive.list プロパティを使用します。システムプロパティ [sys_properties] テーブルでこのプロパティを変更して、認証を処理するために必要なスクリプトインクルードを追加できます。デフォルトでは、このプロパティには次の値があります。
- BasicAuth
- CustomAuth
Perl と SOAP::Lite ライブラリの使用時にベーシック認証を提供するには、次の機能を実装できます。
sub SOAP :: Transport :: HTTP :: Client :: get_basic_credentials { return 'user_name' => 'password' ; }
- C#.NET VS 2005 以前のバージョンを使用している場合は、Credentials オブジェクトを利用できます。
System.Net . ICredentials cred = new System.Net . NetworkCredential ( "user_name", "password" ) ; service . ServiceNow proxy = new service . ServiceNow ( ) ; service . get getService = newservice . get ( ) ; service . getResponse getServiceResponse = new service . getResponse ( ) ; try { proxy . Credentials = cred ; getService . sys_id = "bf522c350a0a140701972dbf876f1610" ; getServiceResponse = proxy . get (getService ) ; catch (Exception ex ) { } - C#.NET VS 2008 を使用している場合は、ClientCredentials オブジェクトを利用できます。
Demo_Incident. ServiceNowSoapClient client = new Test08WebService . Demo_Incident . ServiceNowSoapClient ( ) ; client . ClientCredentials . UserName . UserName = "admin" ; client . ClientCredentials . UserName . Password = "admin" ;次に、app.config ファイルで以下を探し、「None」を「Basic」に変更します。<transport clientCredentialType= "None" proxyCredentialType= "None" realm= "" /> - VB .NET を使用している場合は、Credentials オブジェクトを利用すると次のようになります。
Sub Main() Dim cred As New System.Net.NetworkCredential( "user_name", "password") Dim proxy As New VB_Democm.incident.ServiceNow Dim getIncident As New VB_Democm.incident. get Dim getResponse As New VB_Democm.incident.getResponse proxy.Credentials = cred getIncident.sys_id = "[your sysID here]" getResponse = proxy. get(getIncident) End Subベーシック認証がオンになっており、認証情報が提供されていない場合の結果の応答は、次のようになります。<html> <head > <title >Apache Tomcat/5.0.28 - Error report </ title > <style > <!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;} A {color : black;} A.name {color : black;} HR {color : #525D76;}--> </ style > </ head > <body > <h1 >HTTP Status 401 -\ </ h1 > <HR size = "1" noshade = "noshade" > <p >< b >type </ b > Status report </ p > <p >< b >message </ b > <u >< / u >< / p > <p >< b >description </ b > <u >This request requires HTTP authentication (). </ u >< / p > <HR size = "1" noshade = "noshade" > <h3 >Apache Tomcat/5.0.28 </ h3 > </ body > </ html >