即时通讯使用thinktecture身份识别服务器安全令牌服务我试图建立一个我有一个客户端使用WCF服务的场景.我陷入了下一个错误:
MessageSecurityException
An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.
InnerException
At least one security token in the message could not be validated.
Run Code Online (Sandbox Code Playgroud)
我已经在win2008服务器上设置了STS,所有工作都正确,它已经在使用MVC站点了.但是使用wcf服务我无法使用它.我使用bearerkey作为SecurityKeyType.我在客户端应用程序函数RequestToken()中获得了一个令牌.这是我的wcf服务配置:
<system.serviceModel>
<services>
<service name="ClaimWcfService.Service1">
<endpoint address="ClaimWcfService" binding="ws2007FederationHttpBinding" bindingConfiguration="" contract="ClaimWcfService.IService1" />
<host>
<baseAddresses>
<add baseAddress="https://anno99-pc/"/>
</baseAddresses>
</host>
</service>
</services>
<bindings>
<ws2007FederationHttpBinding>
<binding name="">
<security mode="TransportWithMessageCredential">
<message establishSecurityContext="false" issuedKeyType="BearerKey">
<issuerMetadata address="https://serveradress/Idsrv/issue/wstrust/mex" />
</message>
</security>
</binding>
</ws2007FederationHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="true" …
Run Code Online (Sandbox Code Playgroud) 我有一个现有的数据库,其中包含用户凭据以及这些用户凭据可以访问的应用程序的映射.在身份服务器中,我将每个应用程序设置为客户端,用户可以成功进行身份验证.但是,任何用户都有权获得任何申请.我想知道是否有一种方法可以访问我的IUserService实现请求的客户端?这样我就可以检查他们是否有权使用该应用.
我正在使用Identity Server 4并实现了以下两个接口:
IResourceOwnerPasswordValidator:用于根据我的自定义数据库验证用户凭据
public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator
{
private IUserRepository _userRepository;
public ResourceOwnerPasswordValidator(IUserRepository userRepository)
{
this._userRepository = userRepository;
}
public Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
{
var isAuthenticated = _userRepository.ValidatePassword(context.UserName, context.Password);
//code is omitted for simplicity
}
}
Run Code Online (Sandbox Code Playgroud)
IProfileService:用于获取必要的声明
public class ProfileService : IdentityServer4.Services.IProfileService
{
public IUserRepository _userRepository;
public ProfileService(IUserRepository userRepository)
{
_userRepository = userRepository;
}
public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
//code is ommitted
}
Run Code Online (Sandbox Code Playgroud)
然后将必要的接口和依赖项添加到Startup类中的服务.我还通过注入具有以下实现的登录服务来修改帐户控制器:
public class LoginService
{
private readonly IUserRepository _userRepository;
public LoginService( IUserRepository userRepository) …
Run Code Online (Sandbox Code Playgroud) 我试图通过身份服务器让我的脑袋脱离云端.
我想实现身份服务器项目以进行身份验证
在这篇博文中,我已经阅读了一些关于客户的细节.作者简单地说:
OAuth 2为不同的用例提供了几种"授权类型".定义的授权类型是:
- 在Web服务器上运行的应用程序的授权代码
- 隐含于基于浏览器或移动应用程序
- 使用用户名和密码登录的密码
- 应用程序访问的客户端凭据
授权码和隐式之间有什么区别?这是否意味着隐式应该用于例如javascript代码?
说我需要:
另外一个问题,我想基于Bearer Token和简单的apiKey在我的web api中实现授权.这两种类型都可以融合吗?如何使用Identity Server实现apiKey?
非常感谢,如果这些都是愚蠢的问题,请原谅.
authorization oauth-2.0 thinktecture-ident-server identityserver3 identityserver4