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

Identityserver隐式流用户端

司空默
2023-03-14

我似乎无法理解为什么我从identityserver获取未经授权的客户端。我使用带有Angular 4 ui和asp.net核心web API的oidc客户端。我无法连接到identity server,因为每次它返回时,我的客户端都是未经授权的客户端。

这是已注册的客户端:

new Client
{
    ClientId = "EStudent",
    ClientName = "EStudent",
    AllowedGrantTypes = GrantTypes.Implicit,
    RequireClientSecret = false,
    AllowAccessTokensViaBrowser = true,
    AllowedCorsOrigins = { "http://localhost:63150" },
    LogoutSessionRequired = false,
    RequireConsent = false,
    AllowedScopes = new List<string>
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        "UsersAPI",
    },
    AlwaysIncludeUserClaimsInIdToken = true,
    RedirectUris = {
        "http://localhost:63150/oauth.html"
    },
    PostLogoutRedirectUris = {
        "http://localhost:63150/",
        $"{this._baseAddress}/index.html"
    },
    AllowOfflineAccess = true,
}

这是Angular中的身份验证服务:

import { Injectable, EventEmitter } from '@angular/core';
import { Http, Headers, RequestOptions, Response } from '@angular/http';
import { Observable } from 'rxjs/Rx';

import { UserManager, User } from 'oidc-client';
import { environment } from '../../../environments/environment';

const settings: any = {
    authority: 'http://localhost:8200/oauth',
    client_id: 'EStudent',
    redirect_uri: 'http://localhost:63150/auth.html',
    post_logout_redirect_uri: 'http://localhost:63150/index.html',
    response_type: 'id_token token',
    scope: 'openid profile UsersAPI',

    silent_redirect_uri: 'http://localhost:63150/silent-renew.html',
    automaticSilentRenew: true,
    accessTokenExpiringNotificationTime: 4,
    // silentRequestTimeout:10000,

    filterProtocolClaims: true,
    loadUserInfo: true
};

@Injectable()
export class AuthService {
    mgr: UserManager = new UserManager(settings);
    userLoadededEvent: EventEmitter<User> = new EventEmitter<User>();
    currentUser: User;
    loggedIn = false;
    authHeaders: Headers;

    constructor(private http: Http) {
        this.mgr.getUser().then((user) => {
            if (user) {
                this.loggedIn = true;
                this.currentUser = user;
                this.userLoadededEvent.emit(user);
            } else {
                this.loggedIn = false;
            }
        }).catch((err) => {
            this.loggedIn = false;
        });

        this.mgr.events.addUserLoaded((user) => {
            this.currentUser = user;
            this.loggedIn = !(user === undefined);
            if (!environment.production) {
                console.log('authService addUserLoaded', user);
            }
        });

        this.mgr.events.addUserUnloaded((e) => {
            if (!environment.production) {
              console.log('user unloaded');
            }
            this.loggedIn = false;
        });
    }
}

最后,我像这样调用identityserver:

constructor(public oidcSecurityService: AuthService) { }

ngOnInit() {
    this.oidcSecurityService.mgr.signinRedirect();
}

发送的请求如下:http://localhost:8200/oauth/connect/authorize?client_id=EStudent

共有1个答案

林雅畅
2023-03-14

您的IdentityServer客户端有一个与请求中使用的不匹配的重定向URI

http://localhost:63150/oauth.html

在请求中,您使用:

http://localhost:63150/auth.html

注意缺少的o

 类似资料:
  • 致力于使用Spring实现Oau2。我想实现隐式工作流: 我的配置文件: 到目前为止,这是有效的。数据库中还会生成一个用户。 问题如下。当我尝试执行以下请求时: http://localhost:8080/oauth/token?grant_type=authorization_code 我总是会看到一个弹出窗口(身份验证),要求我输入用户名和密码。但无论我进入那里,我都不会经过。那么到底哪里出了

  • 我已经使用IWebBrowser2控件实现了oAuth2隐式授权流,身份验证对话框从openAM中出现,我已经输入了用户名和密码,它为我提供了访问令牌。但是我的应用程序如何知道哪个用户名是经过身份验证的,我还需要从我的数据库中验证这个用户名?

  • 在过去,我写过一些java程序,使用两个线程。第一个线程(生产者)从API(C库)读取数据,创建一个java对象,将该对象发送到另一个线程。C API正在传递一个事件流(无限)。线程使用LinkedBlockingQueue作为管道交换对象(put、poll)。第二个线程(使用者)正在处理对象。(我还发现,线程中的代码更易读。第一个线程处理C API的内容并生成适当的java对象,第二个线程不受C

  • 我正在尝试使用隐式、密码和授权流使用Spring OAuth 2设置一个项目。 当我使用相同的令牌endpoint进行隐式验证和其他两种验证时,出现了我的问题,密码和授权需要基本的身份验证来进行客户端验证,而隐式验证不验证客户端机密,我想使用更加密的登录/密码身份验证来进行用户授权。 因此,根据配置,一个或两个流可以工作。拥有两个endpoint似乎是最简单的解决方案,但我找不到如何实现这一点。

  • 我正在做一个基于VLCJ流的项目。我查阅了VLCJ教程中关于如何从下面的代码创建服务器端的内容。客户端如何从服务器获取视频内容?我也编写了客户端代码,但它没有显示任何内容。 如有任何帮助,我们将不胜感激。谢谢. 服务器代码: } 客户端: 正如您在上面看到的,MediaPlayer.PlayMedia(publicServer)应该显示视频内容,但没有显示任何内容。JFrame只是空的。

  • 我需要一些有关Azure API管理服务的帮助。 目前,我们有一个单页应用程序,它使用Azure上托管的两个后端服务(WebApi.NETCore)。为了对用户进行身份验证和授权,我们使用IdentityServer(也作为服务托管在Azure上)SubscriptionService。在这里,IdSrv对用户进行身份验证,并定义webapp可以访问哪些api。如果用户拥有给定API的权限,Sub