当前位置: 首页 > 知识库问答 >
问题:

使用Auth0通过单个应用程序登录对多个资源进行身份验证

井唯
2023-03-14

我的应用程序使用Auth0进行身份验证。用户输入用户名密码,Auth0返回一个令牌,我的应用程序使用该令牌调用我的后端。

我的应用程序也在后台使用第三方应用程序,这些第三方应用程序都有自己的身份验证。当用户登录到我的应用程序时,它还需要出去获取所有这些第三方应用程序的身份验证令牌。

例如,我的应用程序需要在沃森上使用一个API,该API使用不同的用户名密码进行身份验证。用户无法知道用户名密码是什么。相反,它们被我的应用程序“知道”,它使用它们登录沃森并获得授权令牌来进行应用编程接口调用。

沃森API不是我的应用程序需要使用的唯一第三方API。第三方API都有自己的身份验证方案。有些使用用户名密码,有些使用应用程序ID和秘密等。但是在所有这些情况下,身份验证凭据都由我的应用程序拥有和管理,而不是由我的应用程序的用户拥有和管理。

所以问题是,当用户登录到我的应用程序时,我如何使用Auth0自动出去并获得所有这些第三方身份验证令牌?

共有2个答案

孙成益
2023-03-14

一旦Auth0身份验证令牌通过身份验证,然后在初始化事件中传递watson API,使用API配置文件模块获取watson API的令牌。希望它能提供一些想法。

和丰羽
2023-03-14

当用户使用Auth0进行身份验证后,客户端将收到可与API服务器或其他第三方服务器一起使用的JSON Web令牌(JWT)。它还包含有关用户的信息,如UID或电子邮件。

看见https://auth0.com/learn/json-web-tokens/

为了使用Auth0自动获取所有第三方身份验证令牌,您可以简单地使用规则来获取这些令牌并将其与您的idToken合并。然后,客户端可以解码JWT并获得所需的令牌或秘密。

规则是用户经过身份验证后将执行的JavaScript代码。

下面是Auth0的示例代码

function (user, context, callback) {

// this is the private key you downloaded from your service account.
// make sure you remove the password from the key and convert it to PEM using the following
// openssl pkcs12 -in yourkey.p12 -out yourkey.pem -nocerts -nodes
// finally, you should put this as a configuration encrypted in Auth0
var KEY = '....RSA private key downloaded from service account...'; 

// this is the email address of the service account created (NOT the Client ID)
var GOOGLE_CLIENT_ID_EMAIL = '.....@developer.gserviceaccount.com';

// the scope you want access to. Full list of scopes https://developers.google.com/admin-sdk/directory/v1/guides/authorizing
var SCOPE = 'https://www.googleapis.com/auth/admin.directory.user.readonly';

// a user of your Google Apps domain that this rule would impersonate
var ADMIN_EMAIL = 'foo@corp.com';

var token = jwt.sign({ scope: SCOPE, sub: ADMIN_EMAIL }, KEY, { audience: "https://accounts.google.com/o/oauth2/token", issuer: GOOGLE_CLIENT_ID_EMAIL, expiresInMinutes: 60, algorithm: 'RS256'});

request.post({ url: 'https://accounts.google.com/o/oauth2/token', form: { grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer', assertion: token } }, function(err, resp, body) {
    if (err) return callback(null, user, context);
    var result = JSON.parse(body);
    if (result.error) {
    console.log(body);
    // log and swallow
    return callback(null, user, context);
    }

    context.idToken['https://example.com/admin_access_token'] = result.access_token;
    callback(null, user, context);
});

}

用户登录后,此规则将从Google请求Access_令牌,然后将其放入响应idToken中。您可以对其他API使用类似的模式。

看见https://auth0.com/docs/rules

 类似资料:
  • 我们目前正在从遗留安全子系统迁移到Elytron,并在JBoss EAP 7.3.6中部署了一个基于Struts2的web应用程序,该应用程序应该支持多种“风格”的身份验证。 登录的标准方式应该是,用户以登录表单()手动提供凭据,然后单击相应的按钮。这在我们的设置中与Elytron配合得很好。 第二种可能性是,对Web应用程序受保护内容的GET请求可能包含包含JWT令牌的自定义cookie。这个c

  • 我有一个移动应用(本机),它已作为应用程序添加到我的Azure ADB2C租户中。 我有一个web api(app/api),它已作为应用程序添加到我的Azure AD B2C租户中。我将移动应用程序设置为具有访问web api的权限。 我设置了2个用户流(不确定是否必要):1.User_Auth,2.Sign_in 我有一些用户已经使用Azure Graph客户端添加到我的广告B2C租户中。(这

  • 我有几个angular应用程序(在不同的子域中)和一个主angular应用程序(在主域中)。我使用@auth0/Angular2-jwt库来管理身份验证。它工作得很好,但对单点登录不起作用。我必须在每个子域登录,我需要这只做一次(在主域或任何子域)。 我尝试过为whitelistedDomains使用正则表达式,但它不起作用: 那么,如果用户登录到主域或任何子域,我如何对所有子域的用户进行身份验证

  • 我正在使用带有azure AD登录选项(OpenId身份验证)的mvc应用程序。我需要为管理员提供模拟选项。所以我决定对这个模拟登录使用表单身份验证。现在我的问题是在webconfig中启用表单身份验证会影响azure AD登录。一旦添加了表单身份验证,它将使用belo url连续显示重定向,http://localhost:9666/members/logon?ReturnUrl=/member

  • 我试图用注册时使用的凭证登录。Firebase已经有注册用户的条目。每次我试图登录它显示“登录不成功”,我没有看到任何代码问题。请帮帮忙。

  • security_applicationcontext.xml UserDetailService实现 } 斯塔克特雷斯。虽然没有例外,但我捕获了stacktrace以供参考。