我在以下代码中得到用户未定义。
我已经从 MVC 验证了用户。
但是当我使用 signinSilentCallback 获取该用户的详细信息时,它在 js 中使用 oidc-client 变得未定义。
它也没有给出任何错误。
var mgr = new UserManager({
authority: "http://localhost:5000",
client_id: "js",
redirect_uri: "http://localhost:50144/signin-oidc",
silent_redirect_uri: "http://localhost:50144/signin-oidc",
response_type: "id_token token",
post_logout_redirect_uri: "http://localhost:50144/signout-callback-oidc",
});
mgr.signinSilentCallback().then(function (user) {
//**Here user is undefined.**
axios.defaults.headers.common['Authorization'] = "Bearer " + user.access_token;
});
Run Code Online (Sandbox Code Playgroud)
在 Identityserver 4 中,客户端定义如下。
new Client
{
ClientId = "js",
ClientName = "js",
ClientUri = "http://localhost:50144",
AllowedGrantTypes = GrantTypes.Implicit,
AllowAccessTokensViaBrowser = true,
RequireClientSecret = false,
AccessTokenType = AccessTokenType.Jwt,
RedirectUris =
{
"http://localhost:50144/signin-oidc",
},
PostLogoutRedirectUris = …Run Code Online (Sandbox Code Playgroud) 我要求允许我们的内部支持用户冒充我们的客户用户.
我目前正在使用IdentityServer4,Implicit Flow和OIDC Client.
迄今为止找到的资源.
鉴于在线资源有限,我是否可以/应该使用IdentityServer4实施模拟?
impersonation asp.net-core identityserver4 implicit-flow oidc-client-js
我认为这是与角度5.2.8和6相关的错误.角度5.2.7工作正常.我创建一个ng5分支并更新角度到最新的5.2.8和错误com!任何人都可以指导我使用oidc-client-js进行角度5.2.8和更高版本的样本?
我已经从redux-oidc-example克隆了 repo并且它在大多数情况下都有效,但是几个小时后它给出了以下错误:
操作负载:ErrorResponse: login_required
at new e (oidc-client.min.js:1)
at t [as _processSigninParams] (oidc-client.min.js:1)
at t [as validateSigninResponse] (oidc-client.min. js:1)
在 oidc-client.min.js:1
UserManager.js 看起来像这样:
const userManagerConfig = {
client_id: 'js.dev',
client_secret: 'secret',
redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/callback`,
response_type: 'id_token token',
scope: 'openid email profile role offline_access',
authority: 'http://localhost:8080',
silent_redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}/silent_renew.html`,
automaticSilentRenew: true,
filterProtocolClaims: true,
loadUserInfo: true
};
Run Code Online (Sandbox Code Playgroud)
和我的身份服务器配置:
{
"Enabled": true,
"ClientId": "js.dev",
"ClientName": "Javascript Client",
"ClientSecrets": [ { "Value": "K7gNU3sdo+OL0wNhqoVWhr3g6s1xYv72ol/pe/Unols=" } ],
"AllowedGrantTypes": …Run Code Online (Sandbox Code Playgroud) 我一直在玩IdentityServer4.绝对喜欢它.
我一直在浏览你网站上的教程,特别是https://identityserver4.readthedocs.io/en/release/quickstarts/7_javascript_client.html
我创建了一个Profile Service,它执行以下操作:
public class ProfileService : IProfileService
{
public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
context.IssuedClaims.Add(new Claim("test-claim", "test-value"));
return Task.FromResult(0);
}
public Task IsActiveAsync(IsActiveContext context)
{
context.IsActive = true;
return Task.FromResult(0);
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,我的自定义声明在我的JS客户端的日志窗口中可见.
我在它上面设置了一个断点,只是为了检查上下文中的内容,我注意到它被击中了两次.呼叫者性质ClaimsProviderAccessToken和UserInfoEndpoint分别.为什么是这样?
在我的天真中,我profile从我的js客户端删除了范围,并且在oidc-js配置中也删除了配置文件范围,然后设置loadUserInfo: false我ProfileService的仍然被调用两次.
如果我的最终目标是根据数据库中的参数设置声明,我真的不想两次做这个操作,是吗?(真正的问题 - 我不知道)."解决方案"只是将它们设置在"ClaimsProviderAccessToken"上,但有一些东西告诉我,ProfileServices会被调用两次,并且它在两次运行中设置声明的重要性.
Ps我认为这里有一个拼写错误https://github.com/IdentityServer/IdentityServer4/blob/dev/docs/quickstarts/8_entity_framework.rst这部分不应该是"Microsoft.EntityFrameworkCore.Tools.DotNet" ClaimsProviderAccessToken吗?而不是"Microsoft.EntityFrameworkCore.Tools"我认为为一些如此微不足道的事情创建一个新问题是不恰当的,而不一定是错的!
我正在与身份服务器4一起为企业架构中的不同应用提供身份服务。
使用oidc-client.js在身份服务器4应用程序中使用隐式流注册了SPA应用程序,并且正在运行。
但是问题在于令牌更新,需要长时间保留用户登录名而又不要求用户再次登录。
为此,请使用以下配置实施静默令牌续订。
var config = {
authority: "http://localhost:5000",
client_id: "jswebclient",
redirect_uri: "http://localhost:5003/callback.html",
response_type: "id_token token",
scope: "openid profile api1",
post_logout_redirect_uri: "http://localhost:5003/loggedout.html",
automaticSilentRenew: true,
silent_redirect_uri : "http://localhost:5003/callback.html" };
Run Code Online (Sandbox Code Playgroud)
var mgr = new Oidc.UserManager(config);
使用上述配置时,会发生自动续订,但没有按预期进行静默续订,正在发生将页面重定向到重定向uri的完整页面,以处理来自身份服务器的响应。
例如:index.html是我的实际页面,在其中进行静默更新,而callback.html是重定向uri,index.html重定向到callback.html,然后更新,然后重定向回到index.html,并附有实际的网络日志下面,
任何人都可以帮助我解决问题以使更新无声发生吗?
在app.jsI hava中,AuthorizationInterceptor它检查用户是否已登录。当用户令牌到期时,它会遇到err条件和错误Frame window timed out(请参见下文),然后进入重定向循环。我想进行无提示登录,但我想iframe出错了。我看不到它曾经重定向到silent-callback.html-仅命中callback.html:
app.factory("AuthorizationInterceptor", ['$q', '$injector', '$rootScope', '$window', 'authService', function ($q, $injector, $rootScope, $window, authService) {
var request = function (requestSuccess) {
var currentTime = Math.floor(Date.now() / 1000);
var deferred = $q.defer();
var oidcManager = window.translation.oidcUserManager;
oidcManager.getUser().then(function (u) {
if (u) {
if (u['expires_at'] < currentTime + 10) {
oidcManager.signinSilent()
.then(function (user) {
requestSuccess.headers['Authorization'] = "Bearer " + user["access_token"];
deferred.resolve(requestSuccess);
}, function (err) {
console.log('getuser error' + err); …Run Code Online (Sandbox Code Playgroud) 我已经成功使用了Brock Allen 的oidc-client-js库,以Auth0作为我的身份提供者对我的SPA应用程序进行了身份验证。但是,当我尝试使用该库将用户注销时mgr.signoutRedirect({state: "my test"}),会收到错误消息:no end session endpoint。
查看元数据端点会发现存在一个撤销端点。
我已经像这样配置oidc-client-js库:
var settings = {
authority: 'https://susqsofttest.auth0.com/.well-known/openid-configuration',
client_id: 'my client id',
redirect_uri: 'http://localhost:8080/signin-oidc',
post_logout_redirect_uri: 'http://localhost:8080/logout',
response_type: 'id_token token',
scope: 'openid profile email',
revokeAccessTokenOnSignout: true,
automaticSilentRenew: true,
filterProtocolClaims: true,
loadUserInfo: true
};
var mgr = new UserManager(settings);
Run Code Online (Sandbox Code Playgroud)
有什么我想念的想法吗?
更新:基本上与Standalone PWA相同的问题会破坏登录但在iOS上.
如果您将Web应用程序添加到主屏幕,则Android上的Chrome会在浏览器中与同一域共享本地存储.您可以通过访问https://wilfrem.github.io/add_to_homescreen_test/进行测试,然后添加到主屏幕,并在主屏幕上打开时看到您具有相同的ID.(我做了Nexus 5x)
如果您在iOS Safari中执行相同操作,则会获得新ID.(我做了iPod iOS 12.1.1)
oidc-client-js库在本地存储中设置会话引用,然后在Web应用程序的signin回调中调用它.因此,如果您尝试从iOS主屏幕上打开的Web应用程序登录,它会在Safari中打开OP(oidc提供程序),然后重定向回Web应用程序的URL,但在Safari中不是从主屏幕Web应用程序打开的,因此,您可以获得不同的本地存储空间:
存储中找不到匹配状态
如果本地存储不在同一个域中共享,您应该如何使用oidc与从主屏幕Web应用程序打开的iOS?或者,当重定向回Web应用程序时,如何让iOS重新打开正确的窗口(从主屏幕打开的窗口)?或者,当我首先导航到OP(oidc提供商)时,如何让iOS永远不会离开全屏应用?
编辑:
这是解释问题的叙述.
my.app.comUserManager.signinRedirect()UserManager.signinRedirect() 电话 OidcClient.createSigninRequest()OidcClient.createSigninRequest()在本地存储中存储登录状态并导航以在Android上my.op.com 查看 打开Chrome选项卡,并在iOS上打开Safarimy.op.commy.op.commy.app.com/signin-callback.html 这里是问题所在在my.app.com/signin-callback.html主屏幕上打开的应用程序中打开Android ,在iOS上它保留在Safari中.所以你得到:
存储中找不到匹配状态
我没有遇到错误,根据发生的错误是完全可以预料到的,我只是不知道如何让Safari以一种可以与库一起工作的方式运行.
如果它相关这是我的manifest.json
{
"name": "omitted",
"short_name": "omitted",
"theme_color": "#omitted",
"background_color": "#omitted",
"display": "standalone",
"scope": "/",
"start_url": "/",
"icons": [
{
"src": "omitted",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "omitted",
"sizes": "512x512", …Run Code Online (Sandbox Code Playgroud) iphone-standalone-web-app openid-connect progressive-web-apps oidc-client-js
我正在使用oidc-client 库在我的 Angular(9) 应用程序中与 Azure AD 集成。signinRedirect()&signinSilent()功能按预期工作。但是对于signinPopup(),它在浏览器 url 片段中成功获取了访问令牌,但它引发了下面提到的错误:
app.component.ts:83 错误:在 oidc-client.min.js:1 的存储中找不到匹配的状态
令人惊讶的是,在 signin-callback.html 中,当我将 response_type 作为 query 传递时var userManager = new Oidc.UserManager({response_mode: "query"});,登录弹出成功但登录重定向失败抱怨
错误:无状态响应
我最初关注了这篇文章。
这是我的服务代码:
import { Injectable } from '@angular/core';
import { UserManager, UserManagerSettings, User } from 'oidc-client';
import { environment } from 'src/environments/environment';
@Injectable({
providedIn: 'root'
})
export class AuthService {
private userManager: UserManager;
constructor() {
this.instantiate();
}
private instantiate() …Run Code Online (Sandbox Code Playgroud) local-storage openid-connect oidc-client-js angular oidc-client
oidc-client-js ×10
angular ×2
asp.net-core ×2
access-token ×1
angularjs ×1
asp.net ×1
auth0 ×1
c# ×1
javascript ×1
oidc-client ×1