You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SharePoint Rest API从SAP服务器访问时出现401错误求助

SharePoint REST API 401 错误解决办法

1. 切换OAuth 2.0认证方式

SharePoint Online 默认禁用基本认证,你当前使用的authenticate方法属于基本认证,无法通过验证,需改用OAuth 2.0:

  • 先在Azure AD注册应用,获取客户端ID、客户端密钥、租户ID
  • 在ABAP中先请求获取访问令牌:
DATA: lo_http_client TYPE REF TO if_http_client,
      lv_token_url TYPE string,
      lv_post_data TYPE string,
      lv_token TYPE string.

lv_token_url = 'https://login.microsoftonline.com/[你的租户ID]/oauth2/v2.0/token'.

cl_http_client=>create_by_url(
  EXPORTING url = lv_token_url
  IMPORTING client = lo_http_client
  EXCEPTIONS OTHERS = 4 ).

lo_http_client->request->set_method( 'POST' ).
lo_http_client->request->set_content_type( 'application/x-www-form-urlencoded' ).

lv_post_data = 'grant_type=client_credentials' &&
               '&client_id=[你的客户端ID]' &&
               '&client_secret=[你的客户端密钥]' &&
               '&scope=https://[你的租户域名].sharepoint.com/.default'.

lo_http_client->request->set_data( lv_post_data ).

lo_http_client->send( EXCEPTIONS OTHERS = 2 ).
lo_http_client->receive( EXCEPTIONS OTHERS = 3 ).

* 解析JSON获取access_token
DATA(lo_json_reader) = cl_sxml_string_reader=>create( lo_http_client->response->get_data( ) ).
DATA(lo_json_parser) = cl_abap_json_parser=>create( lo_json_reader ).
DATA(lt_json_nodes) TYPE abap_json_table.
lo_json_parser->parse( CHANGING data = lt_json_nodes ).

READ TABLE lt_json_nodes INTO DATA(ls_token_node) WITH KEY name = 'access_token'.
IF sy-subrc = 0.
  lv_token = ls_token_node-value.
ENDIF.
  • 调用SharePoint API时,在请求头添加令牌:
lo_http_client->request->set_header_field(
  name = 'Authorization'
  value = |Bearer { lv_token }| ).

2. 本地SharePoint的基本认证检查(仅适用于本地部署)

如果是SharePoint本地服务器,需确认:

  • IIS站点已启用基本认证:在对应站点的认证设置中开启
  • 用户权限:确保该用户不仅有站点访问权限,还对目标列表Ressource有读取权限
  • URL准确性:确认MYURL是完整站点地址(如https://xxx.local/sites/你的站点),列表名称拼写完全匹配(区分大小写)

3. SAP服务器网络与代理设置

  • 验证网络连通性:用事务码SM59创建HTTP连接测试SharePoint URL,或通过服务器命令行ping目标地址
  • 配置代理:如果SAP服务器需通过代理访问外网,添加代理设置:
lo_http_client->set_proxy(
  host = '代理服务器地址'
  port = '代理端口'
  username = '代理用户名' " 按需填写
  password = '代理密码' ).

4. 补充必要请求头

SharePoint REST API要求特定请求头,添加以下字段:

lo_http_client->request->set_header_field( name = 'Accept' value = 'application/json;odata=verbose' ).
lo_http_client->request->set_header_field( name = 'Content-Type' value = 'application/json;odata=verbose' ).

内容的提问来源于stack exchange,提问作者merou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:50:35