我们正在尝试使用 Laravel Passport 实现 SSO 解决方案。关于这个主题已经有一个问题,但我认为这个问题更多的是关于本质问题。
我们的要求是:
根据我对 Oauth2 的理解,系统应该如下工作:
初始登录流程:
请注意,必须重定向到 Passport.com,否则 Safari 和 Chrome 等浏览器在隐身模式下会将 Passport.com 视为第三方域,并且 Cookie 将被阻止。
单点登录流程:
我需要确保 post_logout_redirect_uri 只能将用户定向到列入白名单的 URI,因此根据Azure AD B2C 中的答案容易受到开放重定向的影响?我添加了
SingleSignOn Scope="Tenant" EnforceIdTokenHintOnLogout="false"
Run Code Online (Sandbox Code Playgroud)
到我们的signin_signup自定义策略中ReplyingParty的UserJourneyBehaviors部分。但是,当登录时出现错误
AADB2C90272:请求中未指定 id_token_hint 参数。请提供令牌并重试。
当我阅读微软的文档时,它指出
将先前颁发的 ID 令牌传递到注销端点,作为有关最终用户当前与客户端进行身份验证的会话的提示
但是,用户尚未登录,因此他们还没有颁发 ID 令牌以供通过,并且在收到此错误后不允许他们登录。
我尝试在应用程序的“身份验证”选项卡中启用“ID 令牌(用于隐式和混合流)”选项,但这没有用,因为第一次重定向到 Azure AD B2C 会添加 post_logout_redirect_uri 参数。
我还尝试设置PostLogoutRedirectUri为空字符串、null 和之前登录的 JWT 令牌,OpenIdConnectAuthenticationOptions因为它似乎是在重定向到signin_signup 中生成 post_logout_redirect_uri 的地方,但也无济于事。
id_token_hint 应该是从 Azure AD B2C 返回的 JWTToken 还是另一个 ID 令牌?有没有人有任何 C# 代码显示如何传递它?
我正在nestjs中使用saml进行身份验证我正在使用passport-saml包我将页面正确定向到microsoft登录,但在回调路由中我没有获得配置文件数据,我想要的是让该人进行身份验证saml,之后系统中会生成令牌承载者,到目前为止,正如我之前提到的,我还无法获取启动会话的用户的数据。
auth.module.ts
import { AuthController } from './auth.controller';
import { Saml2Strategy } from './strategies/saml.strategy';
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
@Module({
controllers: [AuthController],
providers: [AuthService, Saml2Strategy],
})
export class AuthModule {}
Run Code Online (Sandbox Code Playgroud)
控制器的路由是get('saml'),它寻址正确,但是当返回回调url时我无法获取该人的数据。auth.controller.ts
import { Saml2Strategy } from './strategies/saml.strategy';
import {
Controller,
Get,
Post,
UseGuards,
Res,
Req,
Request,
Body,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { ApiTags } from '@nestjs/swagger';
const passport = require('passport');
const SamlStrategy = require('passport-saml').Strategy;
import { ConfigSaml …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的应用程序(Xamarin.Forms 应用程序 - ios 和 android)中实现 SSO 功能。登录流程是:当用户打开登录页面时,她/他将看到一个使用 sso 登录的按钮。如果用户选择此按钮,应用程序将打开 sso 的 web 视图,并且当 sso 身份验证完成时(它适用于 mdm 解决方案,例如 Airwatch 等),返回一个 SAML 令牌。
我的问题是如何实现这个,如何从 webview 捕获 saml 令牌?实际上,xamarin中有一种方法,因为我在xamarin进化会议上看到了一个视频: https://www.youtube.com/watch ?v=AAAQJgBDK0w&t=1163s
当 AuthTpye 设置为“SAML”(在视频 15:51 秒中)并且在 webview 上使用 Airwatch sso 打开应用程序登录时(在视频 16:45-17:14 秒中),用户可以使用 sso 登录。但我只能找到这个视频。我找不到此实现的任何其他来源。
此外,我看到了一些 Stack Overflow 问题,他们的答案是使用 Xamarin.Auth nuget 包。但Xamarin.Auth使用oauth2.0协议。我需要使用 saml 协议进行 sso。
我怎样才能做到这一点?
xamarin.ios single-sign-on mdm xamarin.android xamarin.forms
我正在开发一个需要通过 FireBase 使用 Apple 和 Google 登录的应用程序。在开发模式下,signIn 与两者都可以正常工作。但在 TestFlight 中部署后,我无法再使用它们登录。
还有 SignIn with Google 和 Apple 的代码:
Google:
import * as Google from "expo-google-app-auth";
try {
const result = await Google.logInAsync({
iosClientId:
"##############.apps.googleusercontent.com",
scopes: ["profile", "email"],
});
if (result.type === "success") {
const { idToken, accessToken } = result;
const credential = firebase.auth.GoogleAuthProvider.credential(
idToken,
accessToken
);
var user = firebase.auth().currentUser;
user.linkWithCredential(credential).then(async () => {}
Run Code Online (Sandbox Code Playgroud)
Apple:
import * as AppleAuthentication from "expo-apple-authentication";
import * as Crypto from "expo-crypto";
try {
const …Run Code Online (Sandbox Code Playgroud) 首先,我用谷歌搜索了这个问题,但发现了一些通用的解释,这些解释并没有让我很好地理解如何做事情。
其次 - 我是有效的系统用户(不是管理员)并且有权访问数据。即,我拥有有效的用户凭据,并且可以手动下载文件,但对于小型自动化,我希望通过 python 脚本从我的 PC 下载文件。
下载本身很简单,唯一的事情是 - 我需要在请求中提供有效的会话 ID cookie。即最后我需要通过最简单的方式获取这个cookie。
如果我对 SAML 的理解是正确的,我是一个用户代理,想要从服务提供商下载一个文件,该文件需要通过身份提供商(Microsoft)对我进行身份验证。通常我通过浏览器执行此操作,现在我可以在 PySide6 (QWebEngineView) 的帮助下模拟它。我首先在 QWebEngineView 中加载目标 URL。实际上,它是一个小型嵌入式 Web 浏览器,它将我重定向到 login.microsoft.com,询问凭据,然后将我重定向回服务提供商站点并设置会话 ID cookie。然后我就可以在我的请求中使用这个 cookie。它有效,但如果可能的话我想摆脱 GUI (PySide)。
我决定复制浏览器的流程,但几乎一开始就失败了。会发生什么:
我知道当我再次使用 302 响应的“位置”标头中提供的 URL 时,我应该添加更多标头/cookie。但是...我不知道login.microsoft.com 在这里期望什么。所以我的问题是 - 是否有任何描述此消息流的来源?或者也许有人已经这样做了,可以给我如何继续的建议?
我发现了一些与 SAML 相关的 python 库,但我发现 x509 证书和更多内容的配置非常复杂 - …
我使用 Google Identity Platform 和 FirebaseUI-Web 登录我的网站。我有密码登录、Oauth2 Google、OAuth2 Microsoft 和 SSO 选项。
对于除 SSO 之外的所有功能,Identity Platform 都会返回 a,displayName因此我有登录用户的名称。对于 SSO,我没有,而且我也想在那里获取它。
我的客户在其端使用 Azure AD 进行 SSO。他们添加了displayName这样的声明:
但我仍然没有站在displayName我这边。
在使用 FirebaseUI-Web 进行 SSO 登录过程结束时,我收到用户的 ID 令牌。我使用它从 Identity Platform 检索用户,这是我收到的信息:
{
'localId': 'xxx',
'email': 'user@example.com',
'emailVerified': True,
'providerUserInfo': [{
'providerId': 'saml.xxx',
'federatedId': 'user@example.com',
'email': 'user@example.com',
'rawId': 'user@example.com'}],
'validSince': '1639441441',
'lastLoginAt': '1639441441196',
'createdAt': '1639441441196',
'lastRefreshAt': '2021-12-14T00:24:01.196Z'
}
Run Code Online (Sandbox Code Playgroud)
我们如何配置 Azure 以通过 SSO/SAML 登录向 Google Identity Platform 提供用户名?
saml azure single-sign-on azure-active-directory google-cloud-platform
我想使用 Azure 实现 SSO 到使用 Struts 2 构建的应用程序,我已经实现了过滤器以使我可以从 Microsoft 页面登录。
然而,当一切正确时的重定向问题对我来说不太清楚,因为我不太擅长 Struts,因为当您最初登录到应用程序时,它会重定向到这样的 URL localhost:8080/Portal/login/loginAction_validateUser.action。
这是应用程序的原始登录类
public class ActionLogin extends ActionSupport implements ServletRequestAware {
private static Logger logger = LogManager.getLogger(ActionLogin.class);
private HttpServletRequest request;
private UtilHttp uhttp = new UtilHttp();
private UtilFiles ufiles = new UtilFiles();
private User user;
private Person person;
private int invalidateSession;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String validateUser() {
try {
HttpSession session = request.getSession();
uhttp.cleanSession(request);
LoginBusiness business = new LoginBusiness();
String …Run Code Online (Sandbox Code Playgroud) 我们使用 Keycloak 作为 SSO 提供商来登录我们所有的应用程序。
我们使用 keycloak 注销端点在领域级别注销并使用户的访问令牌无效。
我们的问题是,如果用户已连接websiteA并websiteB从 注销,他仍然可以通过浏览器websiteA进行活动的本地会话。websiteB
基本上我们希望用户注销websiteB,有点像如果您从 google 驱动器注销,那么一旦您打开 gmail.com,您也会从 gmail 注销
希望对我们来说,keycloak 支持OIDC 反向通道注销
因此,我们定义当用户从 keycloak 注销时,LogoutToken 会发送到我们选择的端点上的每个应用程序
比方说websiteB/backchannel-logout
因此,在我的 JEE 应用程序中,服务器会在 url 上收到 LogoutToken/backchannel-logout
这是注销令牌的样子,仅供参考
{
"iat": 1654177246,
"jti": "66265511-a5fc-4f60-b5b7-65bea0e1a9e2",
"iss": "https://mykeycloakserver.com/auth/realms/myRealm",
"aud": "websiteB",
"sub": "18e56c69-a90d-4f32-b76a-c9166def54d0",
"typ": "Logout",
"sid": "5bca2f13-f7a6-4b41-bdfc-1f7a89264149",
"events": {
"http://schemas.openid.net/event/backchannel-logout": {},
"revoke_offline_access": true
}
}
Run Code Online (Sandbox Code Playgroud)
此时,我收到了来自 SSO 提供商 keycloak 的注销请求,其中包含sub用户的唯一 ID,这样我就可以知道我想要注销的用户。
但基本上我只是收到一个包含logout_token来自 keycloak 的HttpRequest
String …
我正在尝试在本机 Android 应用程序中实现 SSO 登录,并希望遵循RFC 8252 (OAuth 2.0 for Native Apps)中概述的最佳实践。这需要使用自定义选项卡而不是 WebViews:
B.2. Android 实现细节
应用程序可以通过 Android 自定义选项卡功能在浏览器中发起授权请求,而无需用户离开应用程序,该功能实现了应用程序内浏览器选项卡模式。当没有浏览器支持自定义选项卡时,可以使用用户的默认浏览器来处理请求。
登录过程正常工作,但是一旦用户在 Chrome 自定义选项卡中使用特定帐户登录,则如果不手动在 Chrome 中注销,则无法使用其他帐户登录。
在 iOS 上,可以使用参数设置为 的 来解决此问题ASWebAuthenticationSession,prefersEphemeralWebBrowserSession但true此解决方案在 Android 上不可用。
Chrome 确实为隐身自定义选项卡提供了实验性支持,但这需要用户选择加入,并在触发应用程序的深层链接时显示隐私警告。
我正在寻找一种解决方案,允许本机 Android 应用程序支持多个 SSO 提供商,并允许用户使用不同的帐户登录,而无需在 Chrome 中手动注销。
android single-sign-on oauth-2.0 chrome-custom-tabs android-deep-link