【问题标题】:Access-control-allow-origin is not present in Okta authorization URLOkta 授权 URL 中不存在访问控制允许来源
【发布时间】:2019-04-20 01:52:53
【问题描述】:

我正在开发休息服务并通过 ajax 使用这些服务。

现在我已经使用 okta 保护了我的 Web 服务,当我从 chrome 或任何浏览器调用时它运行良好。但是如果我试图从 Jquery/ajax 中消费,我会遇到错误。任何人都可以请帮忙。

我曾使用 python、flask 开发 web 服务并使用 OpenIdConnect(flask_oidc) 进行身份验证。 一段代码

app = Flask(__name__)
app.config["OIDC_CLIENT_SECRETS"] = 
  services_dir+"okta/client_secrets.json"
app.config["OIDC_COOKIE_SECURE"] = False
app.config["OIDC_CALLBACK_ROUTE"] = "/oidc/callback"
app.config["OIDC_SCOPES"] = ["openid", "profile"]
app.config["SECRET_KEY"] = "********"
app.config['CORS_HEADERS'] = 'Content-Type'

oidc = OpenIDConnect(app)
cors = CORS(app, resources={r"/ai/*": {"origins": "*"}})


 @app.before_request
 def before_request():
     print("Before request",oidc.user_loggedin)
     if oidc.user_loggedin:
         #print("access token",oidc.get_access_token())
         print("sub",oidc.user_getinfo(["name"]))
         g.user = oidc.user_getfield("name")
     else:
         g.user = None  


@app.route('/ai/docsearchStatus', methods = ['GET'])
@cross_origin(origin='*')
@oidc.require_login
def getHealthstatus():
    response = {}
    response['user'] = g.user
    response=json.dumps(response); 
    return response

Jquery Ajax 代码:

$.ajax({     
        type:"GET",     
        url: "https://https://example.com/ai/docsearchStatus", 

        beforeSend: function(xhr) {
            xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
            xhr.setRequestHeader("Accept", "application/json");
            xhr.setRequestHeader("Content-Type", "application/json");
        },
        success:function(data, textStatus, XMLHttpRequest){


        },     
        error:function(XMLHttpRequest, textStatus, errorThrown){ 
            //fnHideLoader();
            }               
    });

如果我调用 https:///ai/docsearchStatus 它工作正常(重定向--验证--得到响应)。 当我从 ajax 尝试时,我得到以下 URL: 错误是:

  Failed to load https://mycompany.okta.com/oauth2/ausl2cu6foKJx4WXS0x7/v1/authorize? Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘https://example.com’ is therefore not allowed access.

任何人都可以帮助解决这个问题。我什至通过 API > Trusted Origins 在 okta admin 中配置了https://example.com

【问题讨论】:

  • 访问控制标头必须由端点服务器设置作为响应。您不能在客户端请求中设置它们。您可以使用您的服务器作为代理发出 api 请求并使用 ajax 调用您的服务器并将 api 数据返回给 ajax
  • 感谢您的快速回复。我在我的服务中启用了 cors,您可以在上面的代码中看到。如果我在上述服务中删除 @oidc.require_login 它将起作用。 Okta 不允许。
  • 所以如果我在 okta admin 中将 origin 添加为受信任,它将解决问题。在那种情况下,我已经添加了。

标签: jquery ajax flask okta openid-connect


【解决方案1】:

您需要在 Okta 中定义一个可信来源。

在您的 Okta 管理控制台中,浏览至:安全 -> API 并选择可信来源选项卡。

然后您可以为 CORS 定义一个可信来源。

全面披露:我为 Okta 工作。

【讨论】:

  • 感谢您的回复,我已询问我的 okta 管理员,她确认她已添加受信任的来源。
猜你喜欢
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
相关资源
最近更新 更多